Web

Сохранение формы кнопкой переключения в Laravel 8.x и добавление ее в таблицу enum

Моя проблема заключается в том, что при добавлении данных при значении "включено" выдается ошибка при записи в раздел базы данных. Если значение "выключено", то запись не происходит.

Моя таблица миграции выглядит следующим образом, а имя таблицы - города. 

$table->bigIncrements('id');

$table->string('title');

$table->enum('status', ['active', 'passive'])->default('active');

 

Классическая форма HTML показана здесь:

<div class="col-lg-6">

  <span class="switch">

    <label>

      <input name="title" type="text" placeholder="Please City Name"/>

      <span></span>

    </label>

  </span>

  <span class="form-text text-muted">{{ __('Required') }}</span>

</div>

</div>

<div class="col-lg-6">

  <span class="switch">

    <label>

      <input name="status" type="checkbox" checked="checked"/>

      <span></span>

    </label>

  </span>

  <span class="form-text text-muted">{{ __('Is it active?') }}</span>

</div>

</div>

 

CityController представлен ниже, я использовал помощник и запрос.

public function store(CityStoreRequest $request): RedirectResponse {

        $data = $this->helper->clean($request);

        $hotels = $this->service->store($data);

        return back()->with(['status' => __('Ok! Recorded.')]);

    }

 

Код CityStoreRequest приведен ниже. Когда я выбираю здесь required, если я делаю кнопку пассивной, запись не добавляется и не добавляются необходимые поля.

public function rules(): array{

        return [

            'title' => 'required',

            'status' => 'required',

        ];

    }

 

CityService:

<?php

 

namespace App\Services;

 

use App\Repositories\CityRepository;

 

class CityService {

    //@var CityRepository

    protected $repository;

    // Конструктор

    public function __construct() {

        $this->repository = new CityRepository();

    }

    // array  $data

    public function index(array $data) {

        return $this->repository->index($data);

    }

    // int  $id

    public function show(int $id) {

        return $this->repository->show($id);

    }

    // array  $data

    public function store(array $data) {

        return $this->repository->store($data);

    }

    public function update(array $data, int $id) {

        return $this->repository->update($data, $id);

    }

    // int  $id

    public function destroy(int $id) {

        return $this->repository->destroy($id);

    }

}

 

Repository:

<?php

 

namespace App\Repositories;

 

use App\Models\City;

 

class CityRepository {

    // City

    protected $city;

 

    // страниц

    protected $perPage = 25;

 

    // конструктор

    public function __construct() {

        $this->city = new City();

    }

 

    // array  $data

    public function index(array $data) {

        return $this->city->filter($data)->paginate($this->perPage);

    }

    // int  $id

    public function show(int $id) {

        return $this->city->findOrFail($id);

    }

    // array  $data

    public function store(array $data) {

        return $this->city->create($data);

    }

    // array  $data

    public function update(array $data, int $id) {

        $hotel = $this->city->findOrFail($id);

        $hotel->fill($data);

        $hotel->save();

        return $hotel;

    }

    // int  $id

    public function destroy(int $id) {

        $hotel = $this->city->findOrFail($id);

        $hotel->delete();

        return $hotel;

    }

}

 

По вашему мнению, где мне нужно проверять данные, поступающие из формы, и предпринять необходимые действия?

 

Ответ 1

Думаю, лучше будет использовать поле boolean вместо enum.

Но если вы хотите использовать enum (возможно, для каких-либо других статусов), используйте простой способ:

  1. Добавьте атрибут value в чекбокс.<input ... value="active" />

  2. Подтвердите входящие status.

  3. Просто сохраняйте его, как и другие поля.

 

Ответ 2

Вы должны проверить ( validate) ввод в вашей форме при проверке. Для вас это в первую очередь CityStoreRequest в функции rules():

public function rules(): array {

    return [

        'title' => 'required',

        'status' => ['required', in:active,passive],

    ];

}

 

Этот код использует правило проверки в Laravel, которое определяет, включено ли значение при вводе в данный список, разделенный запятыми.

Схожие статьи

Addon sprd browser plugin DRM: что это за пакет и для чего он нужен?
Web

Addon sprd browser plugin DRM: что это за пакет и для чего он нужен?

Web

Как проверить, является ли массив PHP ассоциативным или последовательным

Web

Лучшие практики для настраиваемых помощников в Laravel 5

Web

PHP – статические свойства

×