小编典典

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

all

当我浏览 Laravel Document about Eloquent ORM topic part时,我得到了一个新术语“Mass
Assignment”。

文档显示如何进行批量分配和$fillable$guarded属性设置。但是在经历了那之后,我对“Mass
Assignment”及其工作原理没有一个清楚的了解。

在我过去的 CodeIgniter 经验中,我也没有听说过这个术语。

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


阅读 110

收藏
2022-07-01

共1个答案

小编典典

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

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

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

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

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

protected $guarded = ['*'];

假设在您的用户表中,您有一个字段,该字段user_type可以具有 user / admin 的值

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

通过添加:

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

您确保只能使用这些值更新mass assignment

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

$user->user_type = 'admin';
$user->save();
2022-07-01