Laravel:更新数据库记录,而无需逐个设置属性

时间:2018-04-16 16:15:41

标签: eloquent laravel-5.2

我正在使用如下的口才更新laravel中的db记录:

($ request是一个具有我想要更新的属性的对象)

$book = Book::find($request->id)
$book->title = $request->title;
$book->author = $request->author;
$book->publisher = $request->publisher;
.
.
.
$book->something = $request->something;
$book->save();

它运行正常,但我想知道是否可以执行它而不必明确地逐个命名属性,因为$ request中的名称与模型的名称完全相同,如:

$book = $request;
$book->save();

1 个答案:

答案 0 :(得分:0)

$book = Book::find($request->id);
$book->update($request->all());

此处有更多信息https://laravel.com/docs/5.6/queries#updates

但是,在执行此操作之前,您需要在模型上指定可填写保护属性,因为所有Eloquent模型都会默认防止批量分配。

当用户通过请求传递意外的HTTP参数时,会发生批量分配漏洞,并且该参数会更改数据库中您不期望的列。例如,恶意用户可能会通过HTTP请求发送is_admin参数,然后将其传递到模型的创建方法中,允许用户将自己升级为管理员。

详细了解documentations