Laravel违反具有默认值的非null约束

时间:2018-08-02 15:03:03

标签: sql laravel laravel-5

我在Laravel和默认值方面遇到问题。我在表格中创建了该字段,如下所示:

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

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

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

但是我总是收到此错误:

  

SQLSTATE [23502]:不为null违反:7错误:列中的值为null   “标题”违反了非空约束详细信息:失败行包含   (3dd07c7a-e3f3-4f20-8d16-0f066b219dc2,dsfs,sdfs,null,null,null,   sdfs,null,0、0、0、0、0、0,null,null,null)。 (SQL:插入   “用户”(“标题”,“名字”,“姓氏”,“电子邮件”,“ business_unit”,   “ 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)

为什么没有设置我的默认值?

2 个答案:

答案 0 :(得分:1)

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

您可以这样允许他们:

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

或者甚至没有默认设置,默认情况下都将其设置为NULL

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

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


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

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

有关更多信息:https://laravel.com/docs/5.6/eloquent-mutators

答案 1 :(得分:0)

由于'title'键位于提供的数组中,因此它将尝试将其插入:您应该能够插入空值。

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