2012-04-11 104 views
1

在執行查詢時是否有一種簡單的方法遞歸地水合所有相關的對象?在Propel中遞歸水合所有相關的對象

比方說,我有如下表:

Song 
Composer 
Century 

當我做一個SongPeer::doSelectJoinAll()只有相關作曲家的水合,所以如果我再這樣做$song->getComposer()->getCentury(),新的查詢將被執行。

我想只對數據庫執行一個查詢,因此當我在所有歌曲對象的循環中調用$song->getComposer()->getCentury()時,它不會以n個附加查詢結束。

希望我清楚:)

感謝

+2

對於第二個那裏,我還以爲你是用保溼[推進水(HTTP://www.propelzero。 com /)...大聲笑 – Jakub 2012-04-11 16:30:54

回答

3

您正在使用的Propel 1.2?與克里奧爾人?

如果是這樣,請嘗試在SongPeer上實現自己的doSelectJoinAll,以便在其他表(如世紀)上手動添加聯接。

如果您使用的是最新版本的,你只需要在explicit joinWith the table查詢:

<?php 
$song = SongQuery::create() 
    ->joinWith('Song.Composer') 
    ->joinWith('Composer.Century'); 
$century = $song->getComposer()->getCentury(); 
+0

哇,看起來真棒。不幸的是,我堅持使用Propel 1.3(和舊的標準語法),你知道如果上述仍然可能在版本1.3? – Saze 2012-04-11 17:08:34

+0

自定義'doSelectJoinAll'在1.3中似乎沒問題:http://trac.propelorm.org/wiki/Documentation/1.3/Relationships不幸的'joinWith'不是.. – j0k 2012-04-11 17:13:00

+0

啊,我很害怕它不是案件 !我將嘗試更新到Propel 1.6,因爲它顯然是向後兼容的並使用您的解決方案。非常感謝您的幫助! – Saze 2012-04-11 17:21:16