我正在Laravel 4中实现一些模型。当尝试create
一个模型的新实例时,我收到一个MassAssignmentException
。从我的研究中,我了解到,默认情况下,所有领域都被认为是保密的。为了使其工作,我需要指定fillable
字段。一旦我这样做了,它就可以正常工作了。
然而,在数据库播种期间,我正在使用相同的方法创建一些新对象,没有指定fillable
属性,并且我没有收到MassAssignmentException
?这是没有意义的。我遗漏了什么吗?
在添加可填充变量之前抛出MassAssignmentException的代码:
Role::create(array(
'name' => 'admin'
));
databaseseder中没有抛出没有可填充变量的异常的代码:
Company::create(array(
'name' => 'ABC Toys Inc.'
));
有人知道这是为什么吗?
databaseseder类包含在Laravel(我假设你正在使用)中,默认情况下,Mass Assignment守卫是关闭的。
class DatabaseSeeder extends Seeder
{
public function run()
{
Eloquent::unguard();
}
}
Eloquent::unguard()函数关闭批量赋值保护。