Model :: unguard()在Laravel 5的数据库播种器文件中做了什么?

时间:2015-09-26 09:06:10

标签: php laravel-5

我正在尝试找出Laravel附带的Model::unguard();文件中Model::reguard();DatabaseSeeder.php的目的是什么。我已经浏览了laravel网站上的播种文档并用Google搜索但是徒劳无功。

那么Model::unguard();的目的是什么?假设Model::reguard();正好相反。

2 个答案:

答案 0 :(得分:66)

Model::unguard()会暂时禁用模型的质量分配保护,因此您可以为所有模型属性设定种子。

请查看http://laravel.com/docs/5.1/eloquent#mass-assignment,了解有关Eloquent中质量分配的更多信息。

答案 1 :(得分:7)

以货币表为例 迁移文件

    $table->double('rate');
    $table->boolean('is_default')->default(false);

如果您使用的是货币模型文件,则唯一可填写的是

 protected $fillable = [
        'rate',
    ]

is_default不能通过批量分配设置。例如

Currency::create([
   'rate' => 5.6,
   'is_default' => true
])

将返回货币

'rate' => 5.6
'is_default' => false

但是您可以按如下所示使用unguard和reguard大规模分配该字段

Model::unguard()
Currency::create([
   'rate' => 5.6,
   'is_default' => true
])
Model::reguard()

然后将使用创建模型

'rate' => 5.6
'is_default' => true