Laravel:设置空白/空输入的默认值



这是迁移中的代码:

$table->string('role')->default('Standard');

当我将输入框留空时,它会给我一个错误:

"SQLSTATE[23000]:违反完整性约束:1048列"角色"不能为空

如果输入框为空,我们如何将默认值设置为"标准"?

控制器代码

public function store(Request $request)
{
//return ['message' => 'I have your data'];
$request->validate([
'firstname' => 'required|string|max:191',
'lastname' => 'required|string|max:191',
'email' => 'required|string|email|max:191|unique:users',
'password' => 'required|string|min:6',
]);
return User::create([
'firstname' => $request['firstname'],
'lastname' => $request['lastname'],
'email' => $request['email'],
'phone' => $request['phone'],
'role' => $request['role'],
'usernotes' => $request['usernotes'],
'password' => Hash::make($request['password']), //make sure to import Hash: use IlluminateSupportFacadesHash;
'created_by' => $request['created_by'],
'updated_by' => $request['updated_by'],
]);
}

在代码中,$request['role']应该为null,这会导致问题,因为role字段不可为null。

您可以做的是,如果角色为null,则添加dwfault值,只需在代码中进行以下更改,它就可以工作了。

public function store(Request $request)
{
//return ['message' => 'I have your data'];
$request->validate([
'firstname' => 'required|string|max:191',
'lastname' => 'required|string|max:191',
'email' => 'required|string|email|max:191|unique:users',
'password' => 'required|string|min:6',
]);
return User::create([
'firstname' => $request['firstname'],
'lastname' => $request['lastname'],
'email' => $request['email'],
'phone' => $request['phone'],
'role' => $request['role'] ?? 'Standard',
'usernotes' => $request['usernotes'],
'password' => Hash::make($request['password']), //make sure to import Hash: use IlluminateSupportFacadesHash;
'created_by' => $request['created_by'],
'updated_by' => $request['updated_by'],
]);
}

这应该可以解决问题。

说明:我使用的是PHP的Null合并(??(运算符,它将用'Standard'替换Null值。它只适用于PHP7+,如果你有较低版本的PHP,那么你可以考虑使用三元运算符(?:(。

参考:https://www.php.net/manual/en/migration70.new-features.php

使用nullable((;

$table->string('role')->default('Standard')->nullable();

最新更新