我的模型扩展了" \ 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"在模型本身,但没有区别。
全部谢谢
答案 0 :(得分: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();
}
答案 1 :(得分:0)
实际上get()
会返回一个集合,一个Illuminate\Database\Eloquent\Collection
的实例,并且在此集合中没有foo
方法,但要调用您在模型中声明的方法,您需要访问模型,因此集合中的第一个模型将是0
并且要获得它,您可以使用$data->first()
或$data->get(0)
从您可能使用的集合中获取第二个项目(模型){ {1}}等等,但您也可以使用$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);
传递给您的视图,并可以在循环中应用视图中的函数调用,但不建议这样做。