一尘不染

Laravel中的“质量分配”是什么意思?

php

当我阅读有关雄辩的ORM主题部分的Laravel文档时,我有了一个新名词Mass Assignment

文档显示如何进行批量分配和fillableguarded属性设置。但是在经历了这些之后,我Mass Assignment对它及其工作方式没有一个清晰的了解。

根据我过去在CodeIgniter中的经验,我也没有听说过这个词。

有人对此有一个简单的解释吗?


阅读 317

收藏
2020-05-29

共1个答案

一尘不染

质量分配是将数组发送到模型创建时,基本上是一次在模型上设置一堆字段,而不是一个接一个地设置,例如:

$user = new User(request()->all());

(这不是在模型上分别显式设置每个值。)

您可以fillable用来保护您希望此字段实际允许更新的字段。

您还可以通过执行以下操作来阻止所有字段可批量分配:

protected $guarded = ['*'];

假设在您的用户表中,您有一个字段,user_type并且可以包含user / admin的值

显然,您不希望用户能够更新此值。从理论上讲,如果您使用上述代码,则有人可以在表单中注入新字段user_type并与其他表单数据一起发送“
admin”,并轻松地将其帐户切换为admin帐户……这是一个坏消息。

通过添加:

$fillable = ['name', 'password', 'email'];

您要确保只有这些值可以使用更新 mass assignment

为了能够更新user_type值,您需要在模型上显式设置并保存它,如下所示:

$user->user_type = 'admin';
$user->save();
2020-05-29