我在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)
为什么没有设置我的默认值?
答案 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;
}
答案 1 :(得分:0)
由于'title'键位于提供的数组中,因此它将尝试将其插入:您应该能够插入空值。
您可以在Model类中使用mutator setTitleAttribute($val)
方法,或者如果在插入之前该值为空,则可以简单地取消设置'title'数组键。您也可以使用集合助手或array_filter进行过滤,以删除所有未设置的空值。