Laravel - 模型 ID 保护

Laravel - Model ID guarding

假设我们有一个主题提交 html 表单,它使用以下输入字段名称:

name
text

在controller层面我们可能是这样写的:

public function create(Request $request) {
   // Validation logic ...
   Topic::create($request->all());
}

如果客户端用户添加 id 输入字段会怎样:

id
name
text

Laravel 是否也会填充新模型对象的 id 字段? 我可以保护模型的id,还是应该使用$request->only()

您不需要使用 $fillable 数组或 $guarded 作为主键,默认情况下是 id。当您使用 create() 方法时,Eloquent 不会填充主键。

Laravel 有两种实现方式:

class Topic extends Model {
       protected $fillable = [
            "name" , "text"
       ];
}

或者相反的是:

class Topic extends Model {
      protected $guarded = [ "id" ];
} 

$fillable 包含模型中允许批量分配的内容(通过填充或构造函数等),$guarded 包含永远不应批量分配的内容。

更多信息请访问 https://laravel.com/docs/5.5/eloquent#mass-assignment