Laravel 使用firstOrCreate 报错MassAssignmentException
今天尝试使用firstOrCreate去优化一段查找不到即创建的代码,结果发现会报MassAssignmentException错误,提示我参数错误,去网上找了好久没有找到结果,最后庆幸自己解决了,把自己的解决办法分享给大家。当laravel调用firstOrCreate时其实是相当于一个批量赋值的操作,
但是,在此之前,你需要指定模型的fillable
或guarded
属性,因为所有Eloquent模型都通过批量赋值(Mass Assignment)进行保护。
当用户通过 HTTP 请求传递一个不被期望的参数值时就会出现安全隐患,然后该参数以不被期望的方式修改数据库中的列值。例如,恶意用户通过 HTTP 请求发送一个is_admin
参数,然后该参数映射到模型的create
方法,从而允许用户将自己变成管理员。
所以,你应该在模型中定义哪些属性是可以进行赋值的,使用模型上的$fillable
属性即可实现。然后在自己的模型里面设置对应的白名单就解决问题了。
纵千难万险,亦不忘初心