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

2022-08-30 21:41:57

我正在尝试在现有记录上调用 Eloquent 的 save() 方法,但从 Illuminate 的 Query Builder 收到错误。

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

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

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


答案 1

显然,该方法不适用于Eloquent的方法,您必须改用。->get()->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


答案 2

你必须在给定一个->的地方获取你的模型

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

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

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


推荐