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