2013-06-23 4 views
0

Это меня беспокоило, и Google не помог. У меня две модели: танцевальная модель и авторская модель. Отношения заключаются в том, что у автора может быть много танцев. Морщина заключается в том, что между этими объектами есть фактически две связи, так как есть оригинальный автор и автор, гораздо позже приписываемый восстановлению танца (в конце концов, это исторические танцы). Я могу с нетерпением загружать функцию load() для отношения, которое использует обычный внешний ключ, но я не могу узнать, как нужно загружать отношение, использующее другой по-другому внешний ключ.Eloquent Eager Load Double Relationship

Как я могу загружать эту вторую связь?

+0

Вам нужно будет опубликовать свой код, для тех, кто поможет – KyleK

ответ

1

При настройке отношения с другим внешним ключом вы должны указать в отношениях, какой ключ вы хотите использовать ... return $this->hasOne('Author', 'foreign-key');

Так что, если я правильно понял ваш вопрос, который вы хотите настроить отношения двух авторов, в та же самая таблица автора ....

Так что, может быть, что-то вроде этого тогда ??? (Заменить foreign_key с полем таблицы)

public function orig_author(){ 
return $this->hasOne('Author'); 
} 

public function second_author(){ 
return $this->hasOne('Author', 'foreign-key'); 
} 

public function dance(){ 
return $this->hasMany('Dance'); 
} 

Тогда просто получить его, как так ... ($id being the id of your dance)

$dance = Dance::with('orig_author','second_author')->find($id); 

Но если честно, я никогда не пытался с двойными отношениями со столом. .... дайте мне знать, если это сработает для вас. :) Иди, очень интересно.

+0

Просто хотел сообщить вам, что я его тестирую, но я не хочу принимать ответ, по крайней мере, без подтверждения или каких-либо примечаний по как реальное решение заканчивается немного по-другому, пока у меня не будет _confirmed_ рабочего синтаксиса. Пока что все выглядит хорошо. –

+0

Наконец-то добрался до точки, где я могу окончательно проверить это. Да, это работает на меня. Я неправильно понял документацию для 'with()', чтобы вы предоставили ей имя (ы) модели, где на самом деле вы даете ей имена функций, возвращающие отношения. Примечание. Ваш пример должен быть обновлен, чтобы быть «public function orig_author» вместо «public class orig_author». ;) –

+0

Рад, что он работает для вас:) .... но ничего себе я не могу поверить, что я пропустил этот класс/функцию вещь ...... lol – KyleK