3
在我的Symfony2項目,我有兩個實體「接觸」和「設置」,以多對多的關係:NOT IN在許多使用Doctrine的QueryBuilder查詢到很多關係
/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Settings", cascade={"persist"})
* @ORM\JoinColumn(nullable=true)
*/
private $settings;
實體設置有屬性「parametre」,這是一個簡單的字符串。
現在我想讓所有沒有任何設置的「參數」是「主題」的聯繫人。
我能做到這一點的SQL與像查詢:
SELECT DISTINCT(c.id) FROM contact c WHERE c.id
NOT IN (SELECT cs.contact_id FROM contact_settings cs
INNER JOIN Settings s ON s.id = cs.settings_id
WHERE s.parametre = "THEMES")
但我無法弄清楚如何與學說的查詢生成器做。 這是我到目前爲止已經試過:
$query = $this->createQueryBuilder('c')
->join('c.settings', 's');
$qb2 = $qb;
$qb2->select('s2')
->from('AppBundle\Entity\Settings', 's')
->where('s2.parametre = :parametre');
$query->where(($qb->expr()->notIn('s', $qb2->getDQL())));
$query->setParameter('parametre', 'THEMES');
$result = $query->getQuery()->getResult();
不返回任何結果。
謝謝!
我不能這樣做 - >從('AcmeDemoBundle:ContactSettings','cs'),因爲我沒有ContactSettings實體。我應該有嗎? –
@Lo'是的,當然.. – xurshid29
我必須承認我真的不明白。爲什麼我應該有一個實體不會有任何字段(除了兩個引用的實體)?我一直認爲,如果你需要多對多的關係而沒有任何額外的領域,你不必創建實體,只需要@ORM \ ManyToMany註解。 –