【问题标题】:Laravel: Setting a Default Value for Blank/Null InputLaravel:为空白/空输入设置默认值
【发布时间】:2020-04-09 16:28:19
【问题描述】:

这是迁移中的代码:

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

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

"SQLSTATE[23000]: 完整性约束违规:1048 列 'role' 不能为空

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

控制器代码

 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'],
    ]);
    }

【问题讨论】:

  • 'role' => request()->get('role') ?? 'Standard' 应该修复它,但如果没有更多详细信息,我将无法为您提供帮助。
  • @Akshay Khale 这里有更多代码。谢谢。

标签: laravel schema field default


【解决方案1】:

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

您可以做的是,如果角色为空,则添加 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

【讨论】:

  • 那么,在迁移文件中写入默认值有什么意义呢?如果你在创作的时候自己写?
【解决方案2】:

使用 nullable();

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

【讨论】:

  • 非常感谢您的回复。我尝试了 nullable,但它在保存时将字段留空。
猜你喜欢
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
  • 2021-01-15
  • 2017-12-25
  • 2014-02-14
  • 1970-01-01
  • 2019-05-17
相关资源
最近更新 更多