我正在尝试通过链式加入原则来仅选择有效结果来解决问题,但找不到合适的解决方案。尽可能简化:
- 数据库架构:帖子可以有多个评论,每个评论均由作者撰写。
- 任务:获取帖子列表,每个帖子都有 0 到 N 条仅由活跃作者撰写的活跃评论。
我尝试使用的基本查询是:
$queryBuilder
->select('p', 'c', 'a')
->from('AppBundle:Post', 'p')
->leftJoin('p.comment', 'c', Join::WITH, 'o.isActive = 1')
->leftJoin('c.author', 'a', Join::WITH, 'a.isActive = 1')
;
但显然,在不考虑“a.isActive”的情况下,仍然会产生所有评论。
我能看到的唯一其他方法是为“活跃作者的所有活跃评论”创建子查询,然后将其连接到主查询中的评论表,但似乎 Doctrine 不允许这样做
...
->leftJoin($subquery, 'GoodComments', Join::ON, 'GoodComments.comment_id = c.id')
...
那么我是否遗漏了一些东西,或者原生 SQL 是唯一的出路?有什么想法吗?
最佳答案
由于我无法写评论,所以我会在这里提供。
您是否尝试使用简单的 where 条件作为替代方案?
->leftJoin('p.comment', 'c')
->leftJoin('c.author', 'a')
->andWhere('o.isActive=1')
->andWhere('a.isActive=1')
关于mysql - Doctrine2 链式多表连接和过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30813963/