查询具有ALL ManyToMany ID的记录

时间:2015-12-10 09:34:51

标签: mysql symfony doctrine-orm

我正在尝试查询具有所有已定义相关记录的特定记录。

这个例子说明了一切:

$qb->select('p')
   ->from('CommonBundle:MyTerm', 'p')
   ->leftJoin('p.propertyTypes','pt')
   ->where('pt.id IN (:ids)')
   ->setParameter('ids', array(1, 2, 3));

这将返回与pt.id 1,2或3关联的所有记录。

但我想要有关联ID 1,2和3的记录, 任何想法我怎么能这样做?或者我应该使用“分组”并计数?

1 个答案:

答案 0 :(得分:0)

我通过两次加入同一个表来解决它,如下所示:

$qb->select('COUNT(DISTINCT ptnot.id) AS ptnotcount, p')
   ->from('CommonBundle:MyTerm', 'p')
   ->leftJoin('p.propertyTypes','pt')
   ->leftJoin('p.propertyTypes','ptnot')
   ->where('(pt.id in (:ids) OR ptnot.id in (:notids))')
   ->setParameter('ids', array(1, 2, 3))
   ->setParameter('notids', array(4, 5, 6))
   ->groupBy('p.id')
   ->having('ptnotcount = 3'); // Size of the 'ids' array

我基本上是在查询应该的所有内容,以及不应该的所有内容。

然后我看看所有不同的propertyTypes id的匹配是否与我们想要的匹配。