Моя проблема заключается в том, что при добавлении данных при значении "включено" выдается ошибка при записи в раздел базы данных. Если значение "выключено", то запись не происходит.
Моя таблица миграции выглядит следующим образом, а имя таблицы - города.
$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 (возможно, для каких-либо других статусов), используйте простой способ:
Добавьте атрибут value в чекбокс.<input ... value="active" />
Подтвердите входящие status.
Просто сохраняйте его, как и другие поля.
Ответ 2
Вы должны проверить ( validate) ввод в вашей форме при проверке. Для вас это в первую очередь CityStoreRequest в функции rules():
public function rules(): array {
return [
'title' => 'required',
'status' => ['required', in:active,passive],
];
}
Этот код использует правило проверки в Laravel, которое определяет, включено ли значение при вводе в данный список, разделенный запятыми.
Web