Laravel中的“Mass Assignment”是什么意思?
当我通过Laravel有关雄辩的ORM主题部分的文档时,我得到了一个新的术语Mass Assignment
。
文档显示如何进行质量分配以及fillable
或guarded
属性设置。 但是经过这个过程之后,我并没有清楚地了解Mass Assignment
及其运作方式。
在我以前的CodeIgniter经验中,我也没有听说这个术语。
有没有人有一个简单的解释呢?
质量分配是当你发送一个数组到模型创build时,基本上在模型中一次性设置一堆字段,而不是一个接一个,如下所示:
$user = new User(Input::all());
(而不是分别在模型上明确设置每个值。)
您可以使用fillable
来保护您希望实际允许更新的字段。
比方说,在你的用户表中,你有一个user_type
字段,可以有user / admin的值
显然,你不希望用户能够更新这个值。 理论上,如果你使用上面的代码,有人可以注入一个表单一个新的字段user_type
和发送“pipe理员”与其他表格数据,并轻松地将他们的帐户切换到pipe理帐户…坏消息。
通过增加:
$fillable = array('name', 'password', 'email');
您正在确保只有这些值可以使用mass assignment
进行更新
为了能够更新user_type
值,你需要在模型上明确地设置它并保存,如下所示:
$user->user_type = 'admin'; $user->save();
批量分配意味着您使用一组数据填充具有多个列的行。 (有些快捷方式,而不是手动构build数组)使用Input::all()
。
从技术上讲,只是从我的头顶。 可填充意味着允许插入表中的哪些列,保护意味着模型不能插入到特定的列中。
请注意,当您尝试使用like进行批量分配时,插入到名为“secret”的列中,并且您已指定它被守护,您可以尝试通过模型插入到它,但它永远不会真正插入到数据库。
这是为了安全,并在使用模型时保护您的桌子。 大规模的任务似乎只是一个通知或警告,你没有告诉模型,这是可以填写和守卫,使它容易受到某种forms的攻击。
UPDATE
对于Laravel 5.x,您可以参考最新的doc 集体作业
要么
关于何时使用可填写或守护的详细解释