簡體   English   中英

通過使用NOT IN將SQL轉換為Doctrine 2查詢生成器或DQL?

[英]Convert SQL to Doctrine 2 Query Builder or DQL by using NOT IN?

如何將SQL波紋管轉換為Doctrine 2查詢生成器或DQL?

SELECT tags.* 
FROM tags 
WHERE tags.id NOT IN (
                     SELECT tag_id AS totalTags 
                     FROM human_resource_tags 
                     WHERE human_resource_id=1)

標簽實體如下:

標簽實體

HumanResource實體如下:

人力資源實體

基本上,我要做的是為一個HumanResource實體沒有的所有Human實體選擇所有Tag實體。

我在這里真的很掙扎,因此我們將不勝感激。

我正在使用Doctrine版本2.4.2。

================================================== ========================

所有人都向FuzzyTree致指點:)

我對其進行了稍微的修改,它的工作方式就像一個魅力:)因此,這將為您提供尚未添加到HumanResource實體的特定HumanResource實體的所有Tag實體:)

所以這是解決方案:

$q = $this->createQueryBuilder('t')
      ->where('t.name LIKE :name')
      ->andWhere('NOT EXISTS (
                    SELECT h
                    FROM HRAPIBundle:HumanResource h 
                    WHERE h.id = ' . $humanResource->getId() .
                    'AND h MEMBER of t.human_resources
                )')
      ->setParameter('name', "%".$query."%")
      ->getQuery();

您可以使用NOT EXISTSMEMBER OF來實現

$qb->select("t")
    ->from('HardCoreMore\HRAPIBundle\Entity\Tag', 't')
    ->where('NOT EXISTS (
        SELECT 1 
        FROM HardCoreMore\HRAPIBundle\Entity\HumanResource h 
        WHERE h.id = 1 
        AND h MEMBER of t.human_resources
      )');

選擇不需要的$hmEntity ,然后使用以下代碼:

 $em = $this->getDoctrine()->getManager();
 $result= $em->getRepository('HRAPIBundle:Tag')->findByHumanResource(!$hmEntity);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM