我正在尝试通过在链式连接中仅选择有效结果来解决问题,但找不到合适的解决方案。为了尽可能简化:


数据库模式:帖子可以有多个注释,每个注释由作者编写。
任务:获取帖子列表,每个帖子只有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”。

我可以看到的唯一另一种方法是为“活动作者的所有活动评论”创建子查询,然后将其连接到主查询中的Comment表,但是,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/

10-08 20:43