2012-12-13 55 views
10

注:這是一個ORM限制reported on the project's issue trackerDoctrine2:任意加入和單表繼承

我現在面臨使用上的實體類學說2.3推出的任意連接語法建設DQL查詢的問題這是層次結構的根源。

考慮到這些類:

A - 沒有繼承

B1 - 抽象層次的根,鑑別列被命名爲 '型'

我設置一個查詢生成器像這個:

$qb->select('a.id AS idA, b.id AS idB') 
    ->from('\Entity\A', 'a') 
    ->leftJoin('\Entity\B1', 'b', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.something=b.something'); 

而且SQL Doctrine生成的是是這樣的:

SELECT a.id, b.id FROM a LEFT JOIN b ON (a.something=b.something) WHERE b.type IN ('1', '2', '3') 

的問題是,在那裏使左加入沒用。

是否有辦法強制鑑別器列上的條件放置在連接中?至少這會使它...

我應該填寫一個錯誤報告嗎?

回答

-1

您是否試過內連接而不是左連接?你可能需要的查詢可以

SELECT a.id, 
     b.id 
FROM a 
     INNER JOIN b 
       ON (a.something = b.something) 
WHERE b.type IN ('1', '2', '3') 

你可以通過加入改變功能leftJoin;或者創建擁有海關查詢的createQuery方法查詢。

+0

嗯,我想檢索所有的A元素,即使是那些沒有任何B上的內加入將無濟於事。實際上,由於b.type列上的where條件,當前行爲與我使用內部聯接相同。 – Jay

-1

試試這個

SELECT a.id, 
     b.id 
FROM a 
     INNER JOIN b ON (a.something = b.something) and b.type IN ('1', '2', '3')