Laravel 8 批量赋值
你也可以使用 create
方法来保存新模型。 此方法会返回模型实例。 不过,在使用之前,你需要在模型上指定 fillable
或 guarded
属性,因为所有的 Eloquent 模型都默认不可进行批量赋值。
当用户通过请求传入意外的 HTTP 参数,并且该参数更改了数据库中你不需要更改的字段时,就会发生批量赋值漏洞。 比如:恶意用户可能会通过 HTTP 请求传入 is_admin
参数,然后将其传给 create
方法,此操作能让用户将自己升级成管理员。
所以,在开始之前,你应该定义好模型上的哪些属性是可以被批量赋值的。你可以通过模型上的 $fillable
属性来实现。 例如:让 Flight
模型的 name
属性可以被批量赋值:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
/**
* 可批量赋值属性
*
* @var array
*/
protected $fillable = ['name'];
}
一旦我们设置好了可以批量赋值的属性,就可以通过 create
方法插入新数据到数据库中了。 create
方法将返回保存的模型实例:
$flight = App\Models\Flight::create(['name' => 'Flight 10']);
如果你已经有一个模型实例,你可以传递一个数组给 fill
方法来赋值:
$flight->fill(['name' => 'Flight 22']);