Doctrine Search by count on join Table

Lok*_*oki 4 sql join dql symfony doctrine-orm

我的克星有问题:SQL/DQL 我有一个实体:样式和实体投票。一个 Style 可以有很多 Votes(如您所想),并且一个 Vote 只与一个 Style 相关联。

我现在想搜索投票数少于特定数量的样式(这是用户输入,但假设为 5)。这是我与querybuilder 一起使用的代码

$qb = $this->createQueryBuilder('s');
$qb
    ->select("s")
    ->join('s.votes', 'v')
    ->addSelect("COUNT(v.id) as voteCount")
    ->where("voteCount < ?1")
    ->orderBy('voteCount', "DESC")
    ->setMaxResults(3)
    ->setFirstResult(0)
    ->groupBy('s.id')
    ->setParameter(1, 5);

$query = $qb->getQuery();
$result = $query->getResult();
Run Code Online (Sandbox Code Playgroud)

一旦我尝试执行查询,它基本上说,在 where 子句中不知道我的voteCount。这是确切的错误消息

执行'SELECT s0_.active AS active0, s0_.views AS views1, s0_.description AS description2, s0_.name AS name3, s0_.id AS id4, s0_.updated AS updated5, s0_.created AS created6, COUNT (v1_.id) AS sclr7, s0_.battle_id AS Battle_id8, s0_.user_id AS user_id9, s0_.voucher_id AS凭证_id10 FROM Style s0_ INNER JOIN V1_ ON s0_.id = v1_.style_id WHERE ?sclr7 GROUP BY s0_.id ORDER BY sclr7 DESC LIMIT 3 OFFSET 0' 带参数 [1]:

SQLSTATE[42S22]:未找到列:1054 'where 子句'中的未知列 'sclr7'

我做错了什么?如何搜索voteCount?

Fuz*_*ree 5

聚合函数的条件,例如sumcount应该放在having子句中。

$qb = $this->createQueryBuilder('s');
$qb->select("s");
$qb->join('s.votes', 'v');
$qb->addSelect("COUNT(v.id) as voteCount");
$qb->orderBy('voteCount', "DESC");
$qb->setMaxResults(3);
$qb->setFirstResult(0);
$qb->groupBy('s.id');
$qb->having("count(v.id) < ?1"); //changed from where
$qb->setParameter(1, 5);
$query = $qb->getQuery();
$result = $query->getResult();
Run Code Online (Sandbox Code Playgroud)