Трехуровневые ассоциации в phpactiverecord - PullRequest
0 голосов
/ 03 апреля 2012

Прямо сейчас, если я пытаюсь загрузить более двух объектов глубоко в phpactiverecord, я получаю ошибку.

Это что-то вроде этого:

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

Всего один уровень слишком много, чтобы попытаться восстановить? Я получаю сообщение об ошибке Undefined offset: 0 всякий раз, когда пытаюсь использовать ассоциацию глубиной 3 уровня. Спасибо за любую помощь или понимание: D.

Edit:

Итак, я нашел шаблон, который немного странный. Если у меня будет array('playlist_songs'=>array('song'=>array('album')));, рвущаяся нагрузка сломается для меня. Но если я добавлю еще одну ассоциацию в массив, он будет работать правильно. array('playlist_songs'=>array('song','song','song','song'=>array('album')));

Я использовал «song» несколько раз в этом массиве, чтобы сделать исправление очень очевидным.

Ответы [ 2 ]

1 голос
/ 23 июля 2012

Просто исправил это для себя, изменив строку 247 Table.php в execute_eager_load с

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;
}
1 голос
/ 03 апреля 2012

Это должно работать.Пример, который я только что проверил, это мой собственный код:

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

Единственное, о чем я могу подумать, это то, что у вас нет результатов ни по одному из действий, или ваши условия содержат что-то еще изпредыдущее использование массива?

...