Laravel 4 模型方法失败,并显示“调用未定义的方法”


Laravel 4 model method failed with "Call to undefined method"

My models扩展了"''BaseModel",这反过来又扩展了Eloquent。

class BaseModel extends Eloquent {
public function foo($attribute)
{
    //some code
} 

在我的集合中,实例化的模型我试图访问"foo()"方法,但它用"调用未定义的方法"来响应我。

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

此外,我尝试将方法"foo"放在模型本身中,但没有区别。

谢谢大家

基本上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();
}

实际上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传递给视图,并且可以在循环中从视图中应用函数调用,但不建议这样做。