Laravel: установка значения по умолчанию для пустого / нулевого ввода - PullRequest
0 голосов
/ 09 апреля 2020

Это код в миграции:

$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 Illuminate\Support\Facades\Hash;
        'created_by' => $request['created_by'],
        'updated_by' => $request['updated_by'],
    ]);
    }

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

В вашем коде $request['role'] должно быть равно нулю, что вызывает проблему, поскольку поле role не имеет значения Nullable.

Что вы можете сделать, это добавить значение 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'],
]);
}

Это должно решить проблему.

Объяснение: Я использую оператор Null coalescing (??) для PHP, который будет замените нулевое значение на 'Standard'. Работает только PHP 7+, если у вас более низкая версия PHP, то вы можете рассмотреть возможность использования троичного оператора (?:).

Ссылка: https://www.php.net/manual/en/migration70.new-features.php

1 голос
/ 09 апреля 2020

используйте nullable ();

$table->string('role')->default('Standard')->nullable();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...