Doctrine2链式多表连接和过滤

时间:2015-06-13 00:30:12

标签: mysql sql doctrine-orm

我正在尝试解决一个问题,即在学说中仅使用链式连接选择有效结果,但找不到合适的解决方案。为了尽可能地简化它:

  • 数据库架构:帖子可以有多个评论,每个评论都是由作者撰写的。
  • 任务:获取帖子列表,每个帖子只有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唯一的方法吗?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

由于我无法撰写评论,我将在此处提供。

您是否尝试使用简单的条件作为替代方案?

->leftJoin('p.comment', 'c')
->leftJoin('c.author', 'a')
->andWhere('o.isActive=1')
->andWhere('a.isActive=1')