2012-04-11 13 views
1

Gibt es eine einfache Möglichkeit, alle verwandten Objekte rekursiv zu hydratisieren, wenn eine Abfrage durchgeführt wird?Rekursive Hydratation aller verwandten Objekte in Propel

Lassen Sie uns sagen, dass ich die folgenden Tabellen:

Song 
Composer 
Century 

Wenn ich ein SongPeer::doSelectJoinAll() tun nur die damit verbundenen Komponisten mit Feuchtigkeit versorgt werden, also wenn ich dann so etwas wie $song->getComposer()->getCentury() tun, eine neue Abfrage wird durchgeführt werden.

Ich möchte nur eine Abfrage an die DB so, wenn ich $song->getComposer()->getCentury() innerhalb einer Schleife auf alle meine Songs Objekte aufrufen, es endet nicht in n zusätzliche Abfragen.

Hoffe, dass ich klar bin :)

Dank

+2

Für eine Sekunde dachte ich, Sie waren Hydratisieren [Propel Wasser] (http: //www.propelzero. com /) ... lol – Jakub

Antwort

3

Sind Sie mit Propel 1.2? Der mit Kreolen?

Wenn ja, versuchen Sie Ihre eigenen doSelectJoinAll auf SongPeer zu implementieren, um Join auf andere Tabelle (wie Jahrhundert) manuell hinzuzufügen.

Wenn Sie die neueste Version verwenden, müssen Sie nur noch zu explicit joinWith the table in Ihrer Suchanfrage:

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

Wow, das sieht einfach toll aus. Leider bin ich mit Propel 1.3 (und der alten Kriteriensyntax) festgefahren, wissen Sie, ob das oben genannte noch in Version 1.3 möglich ist? – Saze

+0

Die benutzerdefinierte 'doSelectJoinAll' scheint in 1.3 in Ordnung zu sein: http://trac.propelorm.org/wiki/Documentation/1.3/Relationships Leider ist die' joinWith' nicht .. – j0k

+0

Argh, ich hatte Angst es war nicht die Fall ! Ich werde versuchen, auf Propel 1.6 zu aktualisieren, da es anscheinend abwärtskompatibel ist und Ihre Lösung verwendet. Vielen Dank für die Hilfe! – Saze

Verwandte Themen