【发布时间】:2016-11-17 22:15:38
【问题描述】:
我有一组开放时间和关闭时间。
输入如下所示:
<input type="text" name="time[1][open]">
<input type="text" name="time[1][close]">
<input type="text" name="time[x][open]">
<input type="text" name="time[x][close]">
这是来自dd($request->all())的转储
array:2 [
"days" => array:2 [
0 => "1" // Mon
1 => "2" // Tue
]
"time" => array:2 [
1 => array:2 [
"open" => "09:00"
"close" => "11:30"
]
2 => array:2 [
"open" => "16:00"
"close" => "21:00"
]
]
]
使用 Laravel 请求验证 - 如何在打开和关闭时间之间循环进行验证以确保它不会与 mysql 数据库中的现有记录重叠?例如,我们可能在数据库中有 Open:14:00 - Close:19:00 但用户请求了 "open" => "16:00" 和 "close" => "21:00" - 所以验证不应该通过。
更新:
times 表中的示例结果,一天可以有多个打开/关闭时间。
id | day | open_time | close_time
-----------------------------------------------
1 | 1 | 13:30:00 | 15:00:00
2 | 2 | 16:30:00 | 20:00:00
3 | 3 | 09:30:00 | 14:30:00
4 | 3 | 18:00:00 | 22:00:00
-----------------------------------------------
您可以看到 times.id=2 (16:30:00 - 20:00:00) 和用户请求 "open" => "16:00" 和 "close" => "21:00" 之间存在重叠。验证不应通过。
【问题讨论】:
-
如果您可以描述“检查”,请自己编写验证器 :),如果您需要详细指导,请在此处制作。
-
@Kyslik 我需要有关如何每天循环(
days字段)然后验证time数组的详细指导。它需要检查数据库。 -
您能否为有问题的表提供迁移?您是否知道如何自己检查(不要担心“验证器代码”)只是尝试编写伪代码,假设您有一个像您演示的输入,并且您已经从数据库加载了数据,您能编写返回真/假的函数?
-
@Kyslik 我已经更新了问题 - 不用担心时间比较,我自己可以做到。问题更多是通过用户请求的循环,然后检查数据库。
-
你想写一个可重用的验证规则,还是只是“简单地”检查请求(正如你提到的)。