如何在Laravel模型上设置属性的默认值

Zee*_*bal 47 php laravel laravel-5

如何在Laravel模型上设置属性的默认值?

我应该在创建迁移时设置默认值还是应该在模型类中设置默认值?

Man*_*ish 70

您也可以在Model>中设置Default属性

protected $attributes = [
        'status' => self::STATUS_UNCONFIRMED,
        'role_id' => self::ROLE_PUBLISHER,
    ];
Run Code Online (Sandbox Code Playgroud)

您可以在这些链接中找到详细信息

1.)如何为Laravel/Eloquent模型设置默认属性值?

2.)https://laracasts.com/index.php/discuss/channels/eloquent/eloquent-help-generating-attribute-values-before-creating-record


您还可以使用Accessors和Mutators您可以在Laravel文档中找到详细信息.)https://laravel.com/docs/4.2/eloquent#accessors-and-mutators

2.)https://scotch.io/tutorials/automatically-format-laravel-database-fields-with-accessors-and-mutators

3.)Laravel 4中的通用访问器和变换器

  • 使用mutator不会很有效,因为只有在为属性赋值时才会调用mutator.因此,如果您根本没有为该属性赋值,它实际上不会具有您想要的默认值. (4认同)

Goo*_*Mac 17

其他答案对我不起作用 - 它们可能已经过时了.这就是我用作自动设置属性的解决方案:

/**
 * The "booting" method of the model.
 *
 * @return void
 */
protected static function boot()
{
    parent::boot();

    // auto-sets values on creation
    static::creating(function ($query) {
        $query->is_voicemail = $query->is_voicemail ?? true;
    });
}
Run Code Online (Sandbox Code Playgroud)

  • 我只需要设置一个值(如果它在创建时为空),所以这对我来说非常有用 (2认同)

Ale*_*nin 9

您应该在迁移中设置默认值:

$table->tinyInteger('role')->default(1);
Run Code Online (Sandbox Code Playgroud)

  • 例如,在使用模型进行表单验证时,您希望在将其保存到数据库之前具有默认值.使用您的示例时,您需要将记录添加到数据库,然后才能检索默认值,这很麻烦. (4认同)
  • 问题是,如何在模型上设置默认值.它不询问如何在数据库中设置默认值.这些是不同的东西,很多时候你可能想要"新"一个模型而不参考数据库 (4认同)
  • 很多新手家伙google,找到这个问题并提出Manish的回答(并且我的回复),但我仍然认为[最佳实践](https://github.com/alexeymezenin/laravel-best-practices)是做的这在迁移类**中尽可能**.此外,当您验证表单时,我无法想到这种情况,您需要创建一个新行,然后从之前描述的Innovaat中获取DB的默认值.在表单验证期间获取任何类型的默认值听起来像重新发明轮子给我. (2认同)