2012-04-11 7 views
1

クエリを実行するときに関連するすべてのオブジェクトを再帰的に水和する簡単な方法はありますか?私は、関連する作曲が水和されSongPeer::doSelectJoinAll()を行うとPropelで関連するすべてのオブジェクトを再帰的に水和する

Song 
Composer 
Century 

、私はその後、$song->getComposer()->getCentury()ような何かをすれば、新しいクエリが実行されます。

のは、私は、次の表があるとしましょう。

DBに1つのクエリしか実行しないので、すべての曲オブジェクトのループ内で$song->getComposer()->getCentury()を呼び出すと、n個の追加クエリで終了しません。

希望は私は明確だ:)

おかげ

+2

を(HTTP [水をPropelの]。 com /)... lol – Jakub

答えて

3

あなたはPropelの1.2を使用していますか?クレオールを持つ人?

もしそうなら、SongPeerに独自のdoSelectJoinAllを実装して、手動で他のテーブル(世紀など)に結合を追加してみてください。

あなたは最新バージョンを使用している場合、あなたは自分のクエリでexplicit joinWith the tableにあります//www.propelzero:私はあなたが水和と思っていたが第二のために

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

うわー、それはちょうど素晴らしい見えます。 Unfortunaly私はPropel 1.3(および古い基準の構文)に悩まされていますが、バージョン1.3でも上記が可能かどうかは分かりますか? – Saze

+0

カスタム 'doSelectJoinAll'は1.3でうまくいくようです:http://trac.propelorm.org/wiki/Documentation/1.3/Relationships Unfortunaly' joinWith'は..ではありません。 – j0k

+0

ああ、私はそれが違うのではないかと恐れていましたケース!私はPropel 1.6に更新しようとしています。それは明らかに後方互換性があり、あなたのソリューションを使用しているからです。助けをありがとう! – Saze

関連する問題