2014-04-02 84 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到您的视图,可以从视图应用函数调用一个循环内,但不建议使用。