【问题标题】:Doctrine Query Builder count ManyToManyDoctrine Query Builder 计数 ManyToMany
【发布时间】:2018-10-15 08:59:24
【问题描述】:

我有一个实体报价。报价与文件具有多对多关系。 现在我想拥有所有包含文件的优惠 -> Count(offer.files) > 0。

我试过这样,但不起作用:

$this->repository->createQueryBuilder('offer')
            ->addSelect('COUNT(offer.files) as files')
            ->having('files > 1')
            ->getQuery()
            ->getResult();

【问题讨论】:

    标签: mysql doctrine-orm query-builder


    【解决方案1】:

    其实你不需要加入。为此,Doctrine 内置了 SIZE DQL function

    SIZE(collection) - 返回指定集合中的元素个数

    所以你可以这样使用它:

    $this->repository->createQueryBuilder('offer')
        ->addSelect('SIZE(offer.files) as files')
        ->having('files > 1')
        ->getQuery()
        ->getResult();
    

    【讨论】:

      【解决方案2】:

      您需要inner join 与关联和group by 根实体提供:

      ->innerJoin('offer.files', 'files')
      

      INNER JOIN 关键字选择在两个表中具有匹配值的记录。

      那么你可以:

      ->addSelect('COUNT(files) as total')
      ->having('total > 1')
      ->groupBy('offer')
      

      如果结果中不需要总数,可以将其定义为HIDDEN,将上面第一行改为:

      ->addSelect('COUNT(files) as HIDDEN total')
      

      Inner join in detail Doctrine query builder

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-22
        • 2013-07-04
        • 1970-01-01
        • 2015-04-09
        • 2015-05-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多