【问题标题】:Using DQL select only entities that have given count of associated objects使用 DQL 仅选择具有给定关联对象计数的实体
【发布时间】:2013-10-22 16:53:27
【问题描述】:

如何过滤已指定附加关联对象计数的 DQL 实体?

例如:

    $qb = $this->createQueryBuilder('u');
    $qb->where('COUNT(u.moods) > 1');

u.moods 在哪里是用户的一对多关系?

【问题讨论】:

  • 我认为有两种方法,一种是只计算 ArrayCollection 中关联对象的数量。或者,您实际上可以查询具有 (WHERE IN ()) 的关联实体。

标签: doctrine-orm doctrine dql


【解决方案1】:

您可以使用此查询生成器配置。

$qb = $this->createQueryBuilder('u');
$qb
    ->select(array('u'))
    ->from('User', 'u')
    ->innerJoin('u.moods', 'm')
    ->having(
        $qb->expr()->gt(
            $qb->expr()->count('m'), 1
        )
    );

return $qb->getQuery()->getResult();

或者如果你更喜欢 DQL

$dql = "SELECT u FROM User u JOIN u.moods m HAVING COUNT(m) > 1";

$query = $this->createQuery($dql);

return $query->getResult();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多