“大规模分配”在Laravel中意味着什么?
当我浏览Laravel文档关于Eloquent ORM主题部分时,我得到了一个新术语“批量作业”。
文档显示如何执行批量分配和 or 属性设置。但是在经历了这一切之后,我对“大规模分配”及其工作原理并没有清晰的了解。$fillable
$guarded
在我过去在CodeIgniter的经验中,我也没有听说过这个术语。
有没有人对此有一个简单的解释?
当我浏览Laravel文档关于Eloquent ORM主题部分时,我得到了一个新术语“批量作业”。
文档显示如何执行批量分配和 or 属性设置。但是在经历了这一切之后,我对“大规模分配”及其工作原理并没有清晰的了解。$fillable
$guarded
在我过去在CodeIgniter的经验中,我也没有听说过这个术语。
有没有人对此有一个简单的解释?
批量分配是指将数组发送到模型创建中,基本上是一次性在模型上设置一堆字段,而不是逐个设置,如下所示:
$user = new User(request()->all());
(这不是在模型上单独显式设置每个值。
您可以使用 来保护您希望此字段实际允许更新的字段。fillable
您还可以通过执行以下操作来阻止所有字段可批量分配:
protected $guarded = ['*'];
假设在您的用户表中,您有一个字段,该字段可以具有用户/管理员的值user_type
显然,您不希望用户能够更新此值。从理论上讲,如果您使用上述代码,有人可以在表单中注入一个新字段,并将其“admin”与其他表单数据一起发送,并轻松将其帐户切换到管理员帐户...坏消息。user_type
加入:
$fillable = ['name', 'password', 'email'];
您正在确保只有这些值可以使用mass assignment
为了能够更新该值,您需要在模型上显式设置它并保存它,如下所示:user_type
$user->user_type = 'admin';
$user->save();
批量分配是发送一个数据数组的过程,这些数据数组将立即保存到指定的模型中。通常,您不需要逐个保存模型上的数据,而是在单个过程中保存。
批量分配是好的,但背后有一定的安全问题。如果有人将值传递给模型并且没有保护,他们绝对可以修改所有字段,包括ID,该怎么办?这不好。
假设您有“学生”表,其中包含“student_type、first_name last_name”字段。您可能希望批量分配“first_name,last_name”,但希望保护student_type不被直接更改。这就是可填充和守卫发生的地方。
“可填充”允许您指定哪些字段在模型中可批量分配,您可以通过向模型添加特殊变量来执行此操作。所以在模型中:$fillable
class Student extends Model {
protected $fillable = ['first_name', 'last_name']; //only the field names inside the array can be mass-assign
}
“student_type”不包括在内,这意味着它们被豁免。
保护是可填充的反面。如果可填充指定要分配的质量字段,则 guarded 指定哪些字段不可分配质量。所以在模型中:
class Student extends Model {
protected $guarded = ['student_type']; //the field name inside the array is not mass-assignable
}
您应该使用$fillable或$guarded - 而不是两者兼而有之。
有关更多详细信息,请打开链接:- 批量分配