2013-07-02 4 views
0

У меня есть эта проблема. В 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» ошибка. Я искал загруженный способ загрузки, но я не вижу, как он может работать с дополнительным уровнем отношений.

Кроме того, я рассматривал, чтобы запрашивая все активы и фильтрации активов с учетом фактической координации, но я думаю, что это собирается занять много времени, чтобы загрузить ...

Спасибо заранее

ответ

1
class Deparment{ 
public function department_assets(){ 
    $assets = array(); 

    foreach($this->has_many('Coordination')->get() as $coordination){ 
      foreach($coordination->sites()->get() as $site){ 
       foreach($site->assets() as $asset) 
       { 
        $assets[] = $asset; 
       } 
      } 
     } 

    return $assets; 
    } 
} 

Теперь мы можем ...

@foreach($dep->department_assets() as $asset) 
+0

Ну, теперь его «вызов функции члена сайтов() на не-объект» ошибки, который когда Theres нулевое значение не является? – Cheluis

+0

Мне кажется странным. Это поможет увидеть контекст, в котором он используется, чтобы я мог лучше понять, что вы пытаетесь сделать. Кажется, что он возвращает ** массив объектов **, а не строку, что означает, что вы получаете несколько моделей. Возможно, ваше отношение ** has_many ** возвращает несколько результатов? Поскольку вы не можете выполнять реляционные запросы по нескольким результатам, обычно только в отношении ** has_one **. Вы пытались заменить все эти ** методы get() ** на ** first() ** методы? – SixteenStudio

+0

Ну, как я понимаю, многие из них вернут несколько элементов связанной объектной модели. Отдел связывает многие координаты, координация связана с одним или несколькими сайтами, а на сайте может быть один или несколько асет или элементов. Я хочу отобразить все активы, размещенные на разных сайтах всех разных координаций всех отделов. – Cheluis

Смежные вопросы