调用未定义的方法Illuminate\Database\Query\Builder :: save()

Mal*_*dor 14 php eloquent laravel-4

我试图在现有记录上调用Eloquent的save()方法,但是从Illuminate的Query Builder中获取错误.

按照Laravel网站http://laravel.com/docs/eloquent#insert-update-delete上的文档更新检索到的模型,并查看此处的示例:Laravel Eloquent ORM save:update vs create,my code似乎遵循预期的约定,但我得到了这篇文章标题中提到的错误.

$this->employee                  = Employee::where('login', $login);
$this->employee->first_name         = 'John';
$this->employee->last_name          = 'Doe';
$this->employee->save();
Run Code Online (Sandbox Code Playgroud)

Employee类扩展了Eloquent,如果我创建了一个新的模型实例,然后设置了一些属性然后调用save()方法,它就可以很好地执行insert语句.我错过了什么?

Mal*_*dor 34

显然,该->get()方法不适用于Eloquent的->save()方法,您必须使用它->first().

正确: $this->employee = Employee::where('login', $login)->first();

不正确: $this->employee = Employee::where('login', $login)->get();

有关其他参考,请参见http://laravel.io/forum/06-04-2014-symfony-component-debug-exception-fatalerrorexception-call-to-undefined-method-illuminatedatabaseeloquentcollectionsave.


小智 10

在给出 - > where之后你必须获取你的模型

$this->employee = Employee::where('login', $login)->get();
Run Code Online (Sandbox Code Playgroud)

要么

$this->employee = Employee::where('login', $login)->first();
Run Code Online (Sandbox Code Playgroud)

如果你不这样做你的对象$ this->员工不会是一个你不能使用 - > save()