【问题标题】:Laravel Violates not-null constraint with default valueLaravel 使用默认值违反非空约束
【发布时间】:2018-08-02 15:03:03
【问题描述】:

我对 Laravel 和默认值有疑问。我像这样在表中创建了该字段:

$table->string('title', 255)->default('');

在模型中,我再次使用此设置了默认设置:

 protected $attributes = [
        'title' => '',
    ];

但我总是收到此错误:

SQLSTATE[23502]:非空违规:7 错误:列中的空值 “标题”违反非空约束细节:失败行包含 (3dd07c7a-e3f3-4f20-8d16-0f066b219dc2,dsfs,sdfs,空,空,空, sdfs, null, 0, 0, 0, 0, 0, 0, null, null, null)。 (SQL:插入 “用户”(“标题”、“名字”、“姓氏”、“电子邮件”、“业务单位”、 "linkedin_profile") 值 (, dsfs, sdfs, sdfs, , ) 返回 "user_id")

我的简短保存操作(没有验证的示例)如下:

$data = Input::all();
$user = new Users($data);
$user->save();

以下是$data:

array (size=12)
  '_token' => string '0EI9JGmgiNDAqmv83pdQZaktyWNLiX3GB9JQSfvA' (length=40)
  'first_name' => string 'ads' (length=3)
  'last_name' => string 'asd' (length=3)
  'email' => string 'asd' (length=3)
  'title' => null
  'business_unit' => null
  'linkedin_profile' => null
  'is_admin' => string '0' (length=1)
  'is_employee' => string '0' (length=1)
  'is_manager' => string '0' (length=1)
  'is_trainer' => string '0' (length=1)
  'rt' => string '/users' (length=6)

我的默认值怎么没有设置?

【问题讨论】:

  • 受保护的 $attributes = [ 'title' => null, ];
  • 你能告诉我们你创建/保存模型的代码吗?
  • 您甚至不需要在模型中设置默认值。如果您的属性中没有 title,Eloquent 不会发送它,然后它会回退到 MySQL 默认值。
  • @ChinLeung 我用我的储蓄方式更新了这个问题。
  • @DevinDixon 是 $data['title'] 设置为空?

标签: sql laravel laravel-5


【解决方案1】:

问题是您的数据库列不允许标题为空值。

你可以这样允许他们:

$table->string('title')->nullable()->default('');

甚至没有默认设置为NULL

$table->string('title')->nullable();

否则,您必须确保您的标题不为空。


如果您不想允许空值并将其自动转换为空字符串,您可以在模型中添加这样的 mutator:

public function setTitleAttribute($title)
{
    $this->attributes['title'] = is_null($title) ? '' : $title;
}

欲了解更多信息:https://laravel.com/docs/5.6/eloquent-mutators

【讨论】:

  • 所以没有一种优雅的方式已经内置到模型中,允许默认为字符串?
【解决方案2】:

因为'title'键在提供的数组中,它会尝试插入它:你应该能够插入空值。

您可以在 Model 类中使用 mutator setTitleAttribute($val) 方法,或者如果在插入之前值为空,则只需取消设置“title”数组键。您还可以使用集合助手或 array_filter 过滤以删除未设置的所有空值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 2021-04-26
    • 2012-11-01
    • 1970-01-01
    • 2016-02-14
    • 2017-02-18
    • 2020-08-12
    相关资源
    最近更新 更多