2012-04-11 26 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