2013-07-02 37 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{} 

我想顯示由部門分組的所有資產。我試着做這樣的事情:

@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) 
... 

但我得到了「方法[網站]沒有定義在查詢類」錯誤。我一直在尋找熱切的加載方式,但我沒有看到它如何在關係上有更高的級別。

另外,我正在考慮要查詢的全部資產並給予實際的協調過濾資產,但我認爲這是要花費大量的時間來加載...

在此先感謝

回答

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

好了,現在它的「調用一個成員函數網站()一個非對象」的錯誤,那個時候那裏有是一個空值是不是? – Cheluis

+0

我覺得很奇怪。這將有助於查看它正在使用的上下文,以便我可以更好地瞭解您正在嘗試執行的操作。它似乎是返回一個**數組對象而不是一個字符串,這意味着你得到了多個模型。也許你的** has_many **關係正在返回多個結果?因爲你不能對多個結果進行關係查詢,所以通常只有** has_one **關係。你嘗試用** first()**方法替換所有這些** get()**方法嗎? – SixteenStudio

+0

那麼,據我所知,有很多將返回相關對象模型的多個項目。一個部門已經關聯了許多協調,一個協調關聯了一個或多個站點,而一個站點可以是一個或多個aset或項目。我想要顯示放置在每個部門的所有不同協調的不同站點上的所有資產。 – Cheluis