gpt4 book ai didi

php - Laravel 5.1 将多个重复记录输入数据库

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:47:00 25 4
gpt4 key购买 nike

我使用 Laravel 5.1 编写了一个应用程序。该应用程序用于 parking 位。它通过在数据库中创建 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()')]);
}
}

有谁知道为什么会发生这种情况?

最佳答案

在处理此类问题时,database transactions经常被证明是解决方案的一部分。代码看起来像这样:

DB::transaction(function () use ($bays, $date){
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()')]);
}
}
});

要真正确保数据完整性,您还需要 define a unique index跨 parking_bay、date 和 slot 列。您可能需要跳出迁移 API 并仅在迁移中执行 SQL 语句,这将根据您使用的是 MySQL、MSSQL、Postgres 等而有所不同。

在事务和唯一索引之间,数据库将拒绝插入重复的行并回滚错误的插入,因此您不会陷入一个人有早上时段而另一个人有全天时段的情况。

如果您需要任何进一步的帮助,请告诉我!

关于php - Laravel 5.1 将多个重复记录输入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33628387/

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