Zwe*_*012 4 mysql query-builder doctrine-orm
我有一个实体Offer。报价与文件具有多对多关系。现在我想要所有的优惠,有文件 -> Count(offer.files) > 0。
我这样试过,但不起作用:
$this->repository->createQueryBuilder('offer')
->addSelect('COUNT(offer.files) as files')
->having('files > 1')
->getQuery()
->getResult();
Run Code Online (Sandbox Code Playgroud)
小智 6
实际上,您不需要加入。Doctrine为此内置了SIZE DQL 函数。
SIZE(collection) - 返回指定集合中元素的数量
所以你可以像这样使用它:
$this->repository->createQueryBuilder('offer')
->addSelect('SIZE(offer.files) as files')
->having('files > 1')
->getQuery()
->getResult();
Run Code Online (Sandbox Code Playgroud)
->innerJoin('offer.files', 'files')
Run Code Online (Sandbox Code Playgroud)
INNER JOIN 关键字选择在两个表中具有匹配值的记录。
然后你可以:
->addSelect('COUNT(files) as total')
->having('total > 1')
->groupBy('offer')
Run Code Online (Sandbox Code Playgroud)
如果不需要结果中的总计,可以将其定义为HIDDEN,将上面的第一行更改为:
->addSelect('COUNT(files) as HIDDEN total')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1429 次 |
| 最近记录: |