2017-05-02 97 views
1

我尋求答案,但在我的特殊情況下,任何東西。 我需要加入contintionnally表學說2,依賴於一個領域我必須參加兩個不同的外鍵,在這裏我的代碼的價值:Doctrine2的條件連接表

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

不幸的是,我沒有選擇,必須用這些先決條件來實現這個請求。

通過預先感謝您的幫助,

回答

0

不可能做像條件連接這樣的事情。您始終需要連接兩個表並指定不同的連接條件。

你可以做這樣的事情:

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

但老實說,我不知道什麼是你想要的目的。沒有使用某些連接列的條件連接表似乎有點沒有意義。