【发布时间】:2015-11-10 10:55:25
【问题描述】:
我使用 Laravel 5.1 编写了一个应用程序。该应用程序适用于停车位。它通过在数据库中创建 3 个不同的可用插槽(早上、下午、全天)来“提供”空间。
问题是在快速页面刷新时,空间被配置了两次,导致 6 个插槽被输入到数据库中。
但是,如果我在延迟 5 秒后刷新页面,则不会输入更多记录。我下面的 if 语句似乎有效,只是在快速刷新页面/连接时无效。
foreach($bays as $bay) {
if(!BookingDates::where('date', $date)->where('parking_bay', $bay->number)->count()) {
BookingDates::insert(['parking_bay' => $bay->number, 'date' => $date, 'slot' => 'Morning', 'time' => '7am - 1pm', 'status' => 'Available', 'created_at' => DB::raw('now()')]);
BookingDates::insert(['parking_bay' => $bay->number, 'date' => $date, 'slot' => 'Afternoon', 'time' => '1pm - 7pm', 'status' => 'Available', 'created_at' => DB::raw('now()')]);
BookingDates::insert(['parking_bay' => $bay->number, 'date' => $date, 'slot' => 'All Day', 'time' => null, 'status' => 'Available', 'created_at' => DB::raw('now()')]);
}
}
有谁知道为什么会发生这种情况?
【问题讨论】:
-
您总是可以在请求之前添加过滤器以检查可能的数据库冲突
-
但我不明白为什么他们被多次输入?某处有解释吗?我从没想过这是可能的。
-
请发布您的路线以及它们是如何处理的(关闭和/或控制器操作)。如果您发布到与输入预订的路线不同的路线,则不应发生这种情况。
-
@V4n1ll4 这是指向
GET还是POST?通常情况下,如果它是一个帖子并且您尝试过两次发布数据,则必须给予确认。