【发布时间】:2019-08-13 07:15:15
【问题描述】:
去年我创建了一个 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");
}
}
好吧,现在我不得不更改应用程序,以便可以软删除事件,我只是将“deleted_at”字段添加到唯一索引中,认为这会很容易......这种方法不再适用了,所以我'一直在这里和那里阅读这个问题,我唯一得到的是我应该通过一个唯一的验证请求来完成它,但老实说,我只是没有得到这个验证规则的语法,其中三个字段不能是相等,而第四个,deleted_at,为空。
我的应用会检查可用的地点、日期和时间,并且不会让用户选择任何不可用的事件,但无论我告诉他们多少次,总会有人使用浏览器后退按钮并保存事件再次:(
任何帮助将不胜感激。谢谢!
【问题讨论】:
标签: mysql laravel validation request unique