在Doctrine2

时间:2017-05-02 09:16:17

标签: php mysql join doctrine-orm symfony-2.8

我寻求答案,但我的具体情况。 我需要连续加入Doctrine 2表,依赖于我必须加入两个不同外键的字段的值,这里是我的代码:

$qb = $this->entityManager->createQueryBuilder();
    $qb ->select('s')
        ->from('AppBundle:MyTable', 's')
        ->join('s.firstJoin', 'o')
        ->join('s.secondJoin', 'd')
        ->join('AppBundle:joinedView', 'view', Join::WITH,
            "(CASE WHEN (d.secondJoinFK = 3) 
            THEN view.did = d.secondJoinFK 
            WHEN (d.secondJoinFK = 2) 
            THEN view.dvid = d.secondJoinFK END)")
        ->addSelect('d')
        ->where('s.endDate IS NULL');

然而,有了这个请求,Symfony告诉我:[Syntax Error] line 0, col 203: Error: Expected Doctrine\ORM\Query\Lexer::T_ELSE, got '='

此外,我不能使用本机查询,因为我使用PagerFanta渲染模板,而PagerFanta需要在输入上有ORM \ Query而不是ORM \ NativeQuery或其他。

不幸的是,我没有选择,必须使用这些先决条件来实现此请求。

先谢谢你的帮助,

1 个答案:

答案 0 :(得分:0)

不可能做条件连接之类的事情。您始终需要连接两个表并指定不同的连接条件。

您可以这样做:

        ->join('AppBundle:joinedView', 'view1', Join::WITH,
        "view1.did = 3") 
        ->join('AppBundle:joinedView', 'view2', Join::WITH,
        "view2.dvid = 2")
但老实说,我不确定你想要实现的目标。在没有使用某些连接列的条件的情况下连接表似乎有点无意义。