我正在尝试查询具有所有已定义相关记录的特定记录。
这个例子说明了一切:
$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的记录, 任何想法我怎么能这样做?或者我应该使用“分组”并计数?
答案 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的匹配是否与我们想要的匹配。