2010-03-26 69 views
1

我試圖從一個查詢中使用Propel(內部Symfony)從兩個連接的Mysql表中獲取數據的簡單方法。如何在symfony(Propel)中加入表並從兩個表中檢索對象使用一個查詢

比方說,我這樣做簡單的事情:

$comment = CommentPeer::RetrieveByPk(1); 
print $comment->getArticle()->getTitle(); 
//Assuming the Article table is joined to the Comment table 

的Symfony會調用2個查詢弄完。第一個獲得Comment行和第二個獲得鏈接到註釋行的Article行。

現在,我試圖找到一種方法,使一個查詢內的所有內容。我試着用

$c = new Criteria(); 
$c->addJoin(CommentPeer::ARTICLE_ID, ArticlePeer::ID); 
$c->add(CommentPeer::ID, 1); 
$comment = CommentPeer::doSelectOne($c); 

加入他們但是當我嘗試使用

$comment->getArticle() 

獲得Article對象它仍然會發出查詢來獲取物品列。我可以很容易地清除所有選定的列,並選擇我需要的列,但這不會給我我想要的Propel對象,只是查詢的原始結果數組。

那麼我怎樣才能得到一個填充的推動對象的兩個(或更多)連接表只有一個查詢?

感謝,

JP

回答

2

你應該有一個CommentPeer::doSelectJoinArticle()方法,它可以用它來做到這一點。如果你不這樣做,那麼你可能不會在數據庫模式中使用MySQL的InnoDB存儲引擎或外鍵引用,這是我強烈建議的 - 不僅會允許Propel將這些額外的JOIN方法添加到其生成的模型代碼中,但是您將從ACID-compliant數據庫中獲得許多好處。

另一種方法是你自己寫的CommentPeer::doSelectJoinArticle()方法 - this link將描述的過程,但這一過程的長度可以讓你選擇第一個選項:)

+0

謝謝,我不知道有這樣的方法。 – Caissy 2010-03-26 18:13:35

相關問題