$qb = $this->createQueryBuilder('t');
return $qb
->join('t.customers', 'c')
->where($qb->expr()->eq('t.user', $user->getId()))
->andWhere($qb->expr()->gt($qb->expr()->count('c'), 0))
->orderBy('t.name')->getQuery()->getResult();
上面的查询(Doctrine2生成一个)给了我这个错误:
#1111 - Invalid use of group function
但奇怪的是我没有使用GROUP BY
。非常感谢任何帮助,谢谢。
SELECT t0_.id AS id0,
t0_.slug AS slug1,
t0_.name AS name2,
t0_.description AS description3,
t0_.user_id AS user_id4
FROM tag t0_
INNER JOIN customers_tags c2_ ON t0_.id = c2_.tag_id
INNER JOIN customer c1_ ON c1_.id = c2_.customer_id
WHERE t0_.user_id = 1 AND COUNT(c1_.id) > 0
ORDER BY t0_.name ASC
答案 0 :(得分:7)
您在where子句中使用了一个不允许的聚合函数count()
。
关于聚合函数的条件需要进入HAVING子句
....
WHERE t0_.user_id = 1
HAVING count(c1_.id) > 0
当然,您需要使用GROUP BY来获得正确的结果(尽管MySQL可能会让您不使用GROUP BY - 但结果是不可预测的)
答案 1 :(得分:3)
没有必要加入和拥有。只需使用SIZE
功能:
$qb->where('SIZE(t.customers) = 0');
这将为您提供没有附加客户的所有行
答案 2 :(得分:0)
“Count”不能用于没有group by的地方,count是“group function”