В прошлом году я создал сайт laravel с таблицей events , где мне нужно было три поля, чтобы быть уникальными для любого события (место, дата и время).Я не смог настроить запрос на проверку, чтобы сделать это, поэтому я добавил уникальный индекс для этих трех полей напрямую через phpmyadmin и перехватил исключение, которое может произойти, если было вставлено дублированное событие.
Итак, мой метод store () имеет try/catch
вот так:
try {
$event = new Event;
$event->place = $request->input('place');
$event->date = $request->input('date');
$event->time = $request->input('time');
$event->save();
return view(...);
} catch (\Illuminate\Database\QueryException $e) {
// Exception if place-date-time is duplicated
if($e->getCode() === '23000') {
return view('event.create')
->withErrors("Selected date and time is not available");
}
}
Что ж, теперь мне пришлось изменить приложение, чтобы можно было мягко удалять события, и япросто добавил поле «selected_at» к уникальному индексу, думая, что это будет так просто ... Этот подход больше не работает, поэтому я кое-где читал об этой проблеме, и единственное, что я получаю, это то, что я должен сделатьэто через запрос проверки с уникальным, но, честно говоря, я просто не получаю синтаксис для этого правила проверки с тремя полями, которые не могут быть равны, в то время как четвертое, delete_at, имеет значение null.
Мое приложение проверяетдля доступных мест, дат и времени и не позволяет пользователю выбрать любое недоступное событие, но независимо от того, сколько раз я говорил им, что всегда есть кто-токто использует кнопку назад браузера и снова сохраняет событие: (
Любая помощь будет принята с благодарностью.Спасибо!