2015-10-13 70 views
1

我試圖使用查詢生成器加入2個表,它們沒有什麼關係。Symfony的2查詢生成器加入無關係(交叉連接)

期望的最終結果:

SELECT x, y 
FROM x 
JOIN y 

查詢生成代碼:

$qb = $this->getEntityManager()->createQueryBuilder(); 
$qb->select('x'); 
$qb->from('Test1', 'x'); 
$qb->join('Test2', 'y'); 
$qb->orderBy('x.name', 'ASC'); 

產生如下DQL:

SELECT x FROM Test1 x INNER JOIN Test2 y ORDER BY x.name ASC

這導致語法錯誤:

[Syntax Error] line 0, col 137: Error: Expected Literal, got 'BY'

實體Test1和Test2沒有關係(不在代碼中,也不在數據庫中)。

有什麼辦法可以做到這一點? 我想用查詢生成器,因爲我有很多其他功能的依賴於查詢構建器(用於篩選和排序等)的查詢。

我知道這是可能與普通的SQL,或DQL查詢(不通過查詢器生產)。

回答

2

你可以嘗試以下可能性:

public function getYourData($users) { 
    $qb = $this->entityManager->createQueryBuilder(); 
    $qb 
     ->select('x', 'y') 
     ->from('Test1', 'x') 
     ->leftJoin(
      'Test2', 
      'y', 
      \Doctrine\ORM\Query\Expr\Join::WITH, 
      'x.id = y.reference_id' 
     ) 
     ->orderBy('x.name', 'ASC'); 

    return $qb->getQuery()->getResult(); 
} 
+0

但沒有關係。所以x不涉及y –

+0

不明白爲什麼你想排序完全2個不同的表作爲一個單一的?這是非常糟糕的設計實踐。 –

+0

這正是我想要的。我有一個包含域的表格和一個帶參數的表格。我想要一個包含所有域的所有參數列表的結果集。 –