У меня есть эта проблема. В Laravel, у меня есть 3 модели, а именно:Многоуровневые отношения на Laravel
class Department{
public function coordinations(){
return $this->has_many('Coordination');
}
}
class Coordination{
public function sites(){
return $this->has_many('Site');
}
}
class Site{
public function assets(){
return $this->has_many('FAssets');
}
}
class FAsset{}
Я хочу, чтобы отобразить все активы, сгруппированные по департаментах. Я tryied сделать что-то вроде:
@foreach($dependencias as $dep)
<tr>
<td colspan="8" style="width:100%">Dependencia: {{ $dep->code }} {{ $dep->description }}</td>
</tr>
@foreach($dep->coordinations()->sites()->assets()->get() as $asset)
...
Но я получил «метод [сайты] не определен на классе Query» ошибка. Я искал загруженный способ загрузки, но я не вижу, как он может работать с дополнительным уровнем отношений.
Кроме того, я рассматривал, чтобы запрашивая все активы и фильтрации активов с учетом фактической координации, но я думаю, что это собирается занять много времени, чтобы загрузить ...
Спасибо заранее
Ну, теперь его «вызов функции члена сайтов() на не-объект» ошибки, который когда Theres нулевое значение не является? – Cheluis
Мне кажется странным. Это поможет увидеть контекст, в котором он используется, чтобы я мог лучше понять, что вы пытаетесь сделать. Кажется, что он возвращает ** массив объектов **, а не строку, что означает, что вы получаете несколько моделей. Возможно, ваше отношение ** has_many ** возвращает несколько результатов? Поскольку вы не можете выполнять реляционные запросы по нескольким результатам, обычно только в отношении ** has_one **. Вы пытались заменить все эти ** методы get() ** на ** first() ** методы? – SixteenStudio
Ну, как я понимаю, многие из них вернут несколько элементов связанной объектной модели. Отдел связывает многие координаты, координация связана с одним или несколькими сайтами, а на сайте может быть один или несколько асет или элементов. Я хочу отобразить все активы, размещенные на разных сайтах всех разных координаций всех отделов. – Cheluis