Laravel中的“Mass Assignment”是什么意思?

当我通过Laravel有关雄辩的ORM主题部分的文档时,我得到了一个新的术语Mass Assignment

文档显示如何进行质量分配以及fillableguarded属性设置。 但是经过这个过程之后,我并没有清楚地了解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 集体作业

要么

关于何时使用可填写或守护的详细解释