phpactiverecord中的三级关联

时间:2012-04-02 21:04:14

标签: associations eager-loading phpactiverecord

现在,如果我尝试在phpactiverecord中加载两个以上的对象,我会收到错误。

是这样的:

$conditions['include'] = array( 'playlists' => array('playlist_songs' =>array('song')));
User::find('first', $conditions);

尝试检索只有一个级别太多了? 每当我尝试使用3级深度关联时,我收到错误Undefined offset: 0。 感谢您的帮助或见解:D。

编辑:

所以我发现了一个有点奇怪的模式。 如果我有array('playlist_songs'=>array('song'=>array('album')));,那么急切的负荷就会让我失望。但是,如果我向数组添加另一个关联,那么它可以正常工作。 array('playlist_songs'=>array('song','song','song','song'=>array('album')));

我在该阵列中多次使用'song'只是为了使修复非常明显。

2 个答案:

答案 0 :(得分:1)

这应该有效。我刚刚测试了一个我自己代码的例子:

$model = MyItem::find('first',array('include' => array('Group' => array('SomeGroupFeature'))));

我能想到的唯一一件事就是你在其中一件事上没有任何结果,或者你的条件中包含了之前使用过数组的其他内容?

答案 1 :(得分:1)

通过更改execute_eager_load中Table.php的第247行来解决这个问题

if (is_array($name))
{
            $nested_includes = count($name) > 1 ? $name : $name[0];//<-- this line
            $name = $index;
}

if (is_array($name))
{
            $nested_includes = count($name) > 0 ? $name : $name[0];
            $name = $index;
}