Laravel 4模型方法失败了"调用未定义的方法"

时间:2014-04-02 05:17:51

标签: php laravel laravel-4 eloquent

我的模型扩展了" \ 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"在模型本身,但没有区别。

全部谢谢

2 个答案:

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