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

Roh*_*han 35 php laravel-5

我试图找出是什么目的Model::unguard();,并Model::reguard();在在DatabaseSeeder.php文件中附带Laravel.我在laravel的网站上浏览了种子文档并用谷歌搜索但是徒劳无功.

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

pea*_*man 68

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

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


Ako*_*ert 10

以货币表迁移文件为例

    $table->double('rate');
    $table->boolean('is_default')->default(false);
Run Code Online (Sandbox Code Playgroud)

如果您的货币模型文件,唯一的可填写内容是

 protected $fillable = [
        'rate',
    ]
Run Code Online (Sandbox Code Playgroud)

is_default永远不能通过批量赋值来设置。例如

Currency::create([
   'rate' => 5.6,
   'is_default' => true
])
Run Code Online (Sandbox Code Playgroud)

将返回一个货币

'rate' => 5.6
'is_default' => false
Run Code Online (Sandbox Code Playgroud)

但是您可以使用 unguard 和 reguard 批量分配字段,如下所示

Model::unguard()
Currency::create([
   'rate' => 5.6,
   'is_default' => true
])
Model::reguard()
Run Code Online (Sandbox Code Playgroud)

然后你的模型将被创建

'rate' => 5.6
'is_default' => true
Run Code Online (Sandbox Code Playgroud)

  • 竖起大拇指以获得比已接受的解释更详细的解释 (3认同)