2012-04-16 67 views
0

我有一篇文章模型和照片模式,我目前使用這樣的查詢加入二:在Doctrine 1.2中,如何在多對多關係中訪問glue對象屬性?

$q = Doctrine_Query::create() 
     ->from('Article a') 
     ->leftJoin('a.Photo p'); 

爲了結合在一起,我有一個ArticlePhoto模型。除了article_idphoto_id字段外,該模型還有一個priority INT字段,我們要在上面的查詢中對照片進行排序。

任何建議,我怎麼能做到這一點,而不必通過這樣的查詢加盟:

$q = Doctrine_Query::create() 
     ->from('Article a') 
     ->leftJoin('a.ArticlePhoto ap') 
     ->leftJoin('ap.Photo p') 
     ->orderBy('ap.priority'); 

有很多的代碼,希望找到在$article['Photo'][0]文章的第一張照片,所以我想以避免必須改變這一點。感謝您的任何建議!

回答

1

連接有什麼問題?你總是可以重寫你的查詢到這:

$q = Doctrine_Query::create() 
    ->from('Article a') 
    ->leftJoin('a.ArticlePhoto ap, ap.Photo p') 
    ->orderBy('ap.priority'); 

這看起來像一個完美的罰款沒有任何魔術。您需要ArticlePhoto表格中的信息(用於排序),因此做一個明確的聯接是正確的。

+0

謝謝,並對延遲響應抱歉:)我喜歡你的建議。 – Nils 2012-11-17 13:04:41

0
$q = Doctrine_Query::create() 
    ->from('Photo p') 
    ->orderBy('priority'); 

上述將做的伎倆。請知道,不需要連接具有關係的表(假設在您的示例中,表在模式中具有1:m關係)。您可以按照下面的說明啓動物品對象

$photoObjectCollection=$q->execute(); 
foreach($photoObjectCollection as $photoObject){ 
    $photoObject->Article->requiredField; 
} 
+0

'priority'是'ArticlePhoto'中的一個字段,不在'Photo'中。我不認爲你的查詢能做到這一點。 – j0k 2012-04-18 11:55:09

+0

如果我只是使用$ photoObject-> Article-> requiredField - 它似乎使用另一個數據庫查詢每次訪問文章字段。我寧願用相同的查詢請求所有需要的數據。 – Nils 2012-04-18 16:36:14

相關問題