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

2022-08-30 10:43:29

我试图找出Laravel附带的文件的目的和内容。我已经在laravel的网站上浏览了播种文档,并用谷歌搜索了一下,但徒劳无功。Model::unguard();Model::reguard();DatabaseSeeder.php

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


答案 1

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

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


答案 2

以货币表迁移文件为例

    $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

但是,您可以使用取消保护并重新保护来批量分配字段,如下所示

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

然后,您的模型将创建

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

推荐