gpt4 book ai didi

mysql - 验证三个唯一字段和软删除

转载 作者:太空宇宙 更新时间:2023-11-03 10:32:34 24 4
gpt4 key购买 nike

去年我创建了一个带有事件表的laravel网站,其中我需要三个字段对于任何事件(地点、日期和时间)都是唯一的。我无法设置验证请求来执行此操作,因此我直接通过 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,为空。

我的应用会检查可用的地点、日期和时间,并且不允许用户选择任何不可用的事件,但无论我告诉他们多少次,总会有人使用浏览器后退按钮并保存事件再次:(

任何帮助将不胜感激。谢谢!

最佳答案

这不是解决问题的好方法。你可以做以下事情来解决这个问题

  • 如果数据库中存在特定行,则在插入数据库之前获取特定行并存储到一个变量中。

  • 然后检查数据是否已经存入数据库。

  • 如果数据已经存在,使用如下所示的消息包创建自定义验证消息。
$ifExist = $event
->wherePlace(request->input('place'))
->whereDate(request->input('date'))
->whereTime(request->input('time'))
->exist();

if ($ifExist) return 'already exist';

它可能对你有帮助。

关于mysql - 验证三个唯一字段和软删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55297276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com