Как сохранить логическое значение в Laravel 6?
У меня есть
Файл миграции:
public function up()
{
Schema::create('bookings', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('user_id');
$table->string('name');
$table->string('phone');
$table->boolean('wifi');
$table->string('address');
$table->text('desc');
$table->timestamps();
});
}
BookingController.php'sstore
метод:
public function store()
{
$booking = new Booking();
$booking->user_id = 1;
$booking->name = request('name');
$booking->phone = request('phone');
$booking->wifi = request('wifi');
$booking->address = request('address');
$booking->desc = request('desc');
$booking->save();
return redirect('/bookings');
}
create.blad.php является частьюwifi
флажок:
<div class="field">
<label for="wifi" class="label">Wi-Fi</label>
<div class="control">
<input type="checkbox" class="form-check" name="wifi" id="address">
<div>
</div>
Когда я пытаюсь создать запись, я получаю сообщение об ошибке:
1) Я пытаюсь сохранить значение как FALSE:
Illuminate\Database\QueryException SQLSTATE[23000]: нарушение ограничения целостности: 1048 Столбец "Wi-Fi" не может быть пустым (SQL: вставить в
bookings
(user_id
,name
,phone
,wifi
,address
,desc
,updated_at
,created_at
) values (1, Дракон, 12341234,?, asdfasdfasdkf hsadfasdf, asdfasdfas, 2020-02-27 07:10:55, 2020-02-27 07:10:55))
2) И когда я поставил галочку Wi-Fi (значение ИСТИНА)
Illuminate\Database\QueryException SQLSTATE[22007]: недопустимый формат даты и времени: 1366 Неправильное целочисленное значение: 'on' для столбца
kaganat
.bookings
.wifi
в строке 1 (SQL: вставить вbookings
(user_id
,name
,phone
,wifi
,address
,desc
,updated_at
,created_at
) values (1, Dragon, 12341234, on, asdfasdfasdkf hsadfasdf, asdfasdfasdfsafaa, 2020-02-27 07:17:15, 2020-02-27 07:17:15))
ОБНОВИТЬ:
РЕШЕНИЕ:
Обновить от
$booking->wifi = request('wifi');
к
$booking->wifi = request()->has('wifi');
1 ответ
Вы можете проверить с помощью метода has, было ли отправлено значение и, следовательно, вы можете вставить true или false.
Вы можете прочитать это здесь, в документации: https://laravel.com/docs/6.x/requests
Так что это должно быть что-то вроде $request->has('wifi')
. Метод has вернет true, если значение присутствует в запросе. Если это значение истинно, вы можете присвоить полю истинное значение, в противном случае - ложь. Это был бы мой подход.
Если вам нужен пример, вы можете посмотреть на этот вопрос Передача логического значения из флажка в форме Laravel 5.8