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