Laravel:为 Blank/Null 输入设置默认值
Laravel: Setting a Default Value for Blank/Null Input
这是迁移中的代码:
$table->string('role')->default('Standard');
当我将输入框留空时,出现错误:
"SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'role' cannot be null
如果输入框留空,我们如何设置默认值"Standard"?
控制器代码
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 Illuminate\Support\Facades\Hash;
'created_by' => $request['created_by'],
'updated_by' => $request['updated_by'],
]);
}
使用 nullable();
$table->string('role')->default('Standard')->nullable();
在您的代码中,$request['role']
应该为空,这是导致问题的原因,因为 role
字段不可为空。
您可以做的是,如果角色为 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 Illuminate\Support\Facades\Hash;
'created_by' => $request['created_by'],
'updated_by' => $request['updated_by'],
]);
}
这应该可以解决问题。
说明:我正在使用 PHP 的 Null 合并 (??) 运算符,它将用 'Standard'
替换空值。它只适用于 PHP 7+,如果你有较低版本的 PHP 那么你可以考虑使用三元运算符(?:).
参考:https://www.php.net/manual/en/migration70.new-features.php
这是迁移中的代码:
$table->string('role')->default('Standard');
当我将输入框留空时,出现错误:
"SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'role' cannot be null
如果输入框留空,我们如何设置默认值"Standard"?
控制器代码
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 Illuminate\Support\Facades\Hash;
'created_by' => $request['created_by'],
'updated_by' => $request['updated_by'],
]);
}
使用 nullable();
$table->string('role')->default('Standard')->nullable();
在您的代码中,$request['role']
应该为空,这是导致问题的原因,因为 role
字段不可为空。
您可以做的是,如果角色为 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 Illuminate\Support\Facades\Hash;
'created_by' => $request['created_by'],
'updated_by' => $request['updated_by'],
]);
}
这应该可以解决问题。
说明:我正在使用 PHP 的 Null 合并 (??) 运算符,它将用 'Standard'
替换空值。它只适用于 PHP 7+,如果你有较低版本的 PHP 那么你可以考虑使用三元运算符(?:).
参考:https://www.php.net/manual/en/migration70.new-features.php