【问题标题】:Conditionnally join table on Doctrine2有条件地加入 Doctrine2 上的表
【发布时间】:2017-05-02 09:16:17
【问题描述】:

我寻求答案,但在我的特殊情况下没有任何问题。 我需要使用 Doctrine 2 加入 contintionnally 表,这取决于我必须加入两个不同外键的字段的值,这里是我的代码:

$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 或其他。

很遗憾,我别无选择,必须在满足这些先决条件的情况下实现此请求。

提前感谢您的帮助,

【问题讨论】:

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


    【解决方案1】:

    不可能进行条件连接之类的操作。您总是需要连接两个表并指定不同的连接条件。

    你可以这样做:

            ->join('AppBundle:joinedView', 'view1', Join::WITH,
            "view1.did = 3") 
            ->join('AppBundle:joinedView', 'view2', Join::WITH,
            "view2.dvid = 2")
    

    但老实说,我不确定您要达到什么目标。在没有使用某些连接列的条件的情况下连接表似乎有点毫无意义。

    【讨论】:

      猜你喜欢
      • 2020-07-20
      • 2020-03-30
      • 2019-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 2012-10-19
      相关资源
      最近更新 更多