Sql Laravel违反了具有默认值的NOTNULL约束

Sql Laravel违反了具有默认值的NOTNULL约束,sql,laravel,laravel-5,Sql,Laravel,Laravel 5,我对Laravel和默认值有问题。我在表格中创建了如下字段: $table->string('title', 255)->default(''); 在模型中,我使用以下方法再次设置了默认值: protected $attributes = [ 'title' => '', ]; 但我总是犯这样的错误: SQLSTATE[23502]:非空冲突:7错误:列中的值为空 “标题”违反非空约束详细信息:失败的行包含 (3dd07c7a-e3f3-4f20-

我对Laravel和默认值有问题。我在表格中创建了如下字段:

$table->string('title', 255)->default('');
在模型中,我使用以下方法再次设置了默认值:

 protected $attributes = [
        'title' => '',
    ];
但我总是犯这样的错误:

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

我的缩写保存操作(未经验证的示例)如下所示:

$data = Input::all();
$user = new Users($data);
$user->save();
以下是$数据:

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)

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

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

您可以这样允许它们:

$table->string('title')->nullable()->default('');
或者即使没有默认设置,也可以默认设置为
NULL

$table->string('title')->nullable();
否则,您必须确保您的标题不为空


如果您不希望允许空值并将其自动转换为空字符串,则可以向模型中添加一个类似于以下内容的变量:

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

有关详细信息:

问题在于数据库列不允许标题为空值

您可以这样允许它们:

$table->string('title')->nullable()->default('');
或者即使没有默认设置,也可以默认设置为
NULL

$table->string('title')->nullable();
否则,您必须确保您的标题不为空


如果您不希望允许空值并将其自动转换为空字符串,则可以向模型中添加一个类似于以下内容的变量:

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

有关详细信息:

因为“title”键位于提供的数组中,它将尝试插入它:您应该能够插入空值


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

因为“title”键在提供的数组中,它将尝试插入它:您应该能够插入空值


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

受保护的$attributes=['title'=>null,];你能告诉我们你创建/保存模型的代码吗?你甚至不需要在模型中设置默认值。如果属性中没有
title
,Eloquent将不会发送它,然后它将返回MySQL默认值。@ChinLeung我用如何保存更新了问题。@DevinDixon将
$data['title']
设置为null?受保护的$attributes=['title'=>null,];你能告诉我们你创建/保存模型的代码吗?你甚至不需要在模型中设置默认值。如果属性中没有
title
,Eloquent将不会发送它,然后它将返回MySQL默认值。@ChinLeung我用如何保存更新了问题。@DevinDixon是
$data['title']
设置为null?因此,模型中没有一种优雅的方式可以允许默认设置为字符串?因此,模型中没有一种优雅的方式可以允许默认设置为字符串?