2014-04-02 161 views
2

我的模型擴展了「\ BaseModel」,從而擴展了雄辯。Laravel 4模型方法因「調用未定義方法」失敗

class BaseModel extends Eloquent { 

public function foo($attribute) 
{ 
    //some code 
} 

在我的收藏,其中被實例化的模型,我試圖訪問「富()」方法,但它迴應我「調用未定義的方法」。

$data = IncomeDoc::with('details') 
          ->where('type', '!=', 2) 
          ->get(); 
$data = $data->foo(); 

此外,我試圖將方法「foo」放在模型本身,但沒有區別。

感謝所有

+0

我很確定當你填充'$ data'時,它變成了一個交響樂數據庫對象,不再是你的模型 – Ohgodwhy

+0

@Ohgodwhy謝謝你的信息。你有什麼想法如何解決它? – Dan

+0

@SheikhHeera我試圖操縱我的數據以達到此目的:[link](http://stackoverflow.com/questions/22802670/laravel-4-eager-load-as-a-list-of-ids) – Dan

回答

0

基本上get()方法返回實例的集合。假定超過1個模型滿足type != 2條件。如果您想在條件下獲得第一個型號,請使用first()代替。

$data = IncomeDoc::with('details') 
         ->where('type', '!=', 2) 
         ->first(); 
$data = $data->foo(); 

否則:

$collection = IncomeDoc::with('details') 
         ->where('type', '!=', 2) 
         ->get(); 

$data = []; 
foreach($collection as $item) { 
    $data[] = $data->foo(); 
} 
+0

謝謝您的回答。我已經嘗試過了,它確實有效,但只有一個結果迴應我。 – Dan

+0

當然。否則,您需要遍歷集合。 – cheelahim

+0

也許你有什麼想法我怎麼能達到[這](http://stackoverflow.com/questions/22802670/laravel-4-eager-load-as-a-list-of-ids)? – Dan

0

其實get()返回一個集合的Illuminate\Database\Eloquent\Collection一個實例,並在此集合沒有foo方法,而是調用您在模型中聲明的方法,則需要訪問該模型,因此該集合中的第一個模型將是0並且爲了得到它,您可以使用$data->first()$data->get(0)從集合中獲得第二個項目(模型),您可以使用$data->get(1)等等,但是您也可以使用loop,例如:

$data = IncomeDoc::with('details')->where('type', '!=', 2)->get(); 
$dataArray = array(); 
$data->each(function($item) use (&$dataArray){ 
    $dataArray[] = $item->foo(); 
}); 
return View::make('viewname')->with('data', $dataArray); 

此外,您也可以直接通過$data到您的視圖,可以從視圖應用函數調用一個循環內,但不建議使用。