gpt4 book ai didi

php - 使用 laravel 处理预订系统中的并发

转载 作者:行者123 更新时间:2023-11-29 14:16:56 27 4
gpt4 key购买 nike

我正在使用 postgresql 在 Laravel 5.2 中开发一个 REST api,用于处理具有 start_time 和 end_time 的不同机构的预订。用户可以在前端看到特定场所的不同时间并进行预订。这是有问题的情况:

  1. 客户 A 想预订一家酒店。确保机构 A 从 15:00 hs 到 20:00 hs 免费
  2. 客户 A 选择 16:00 到 17:00 时间。 (必须按一个按钮来确认预订)
  3. 客户 B 想预订一家酒店。看到机构 A 从 15:00 hs 到 20:00 免费
  4. 客户 B 选择 16:00 到 17:00 的约会(同样,必须按一个按钮来确认预订)
  5. 客户A确认预订
  6. 如果客户 B 确认预订,我们将同时进行 2 次预订。

已经阅读了很多关于 laravel 中队列的内容,但我不确定这是否是解决此问题的正确方法。

这些机构没有任意的营业时间,因此客户可以预订 1、2 或 3 小时。

这是我的预订模型

    Schema::create('bookings', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->timestamp('start_time');
$table->timestamp('end_time');
$table->integer('user_id')->nullable();
$table->integer('establishment_id')->nullable();
$table->string('name')->nullable();
$table->string('phone_number')->nullable();

});

最佳答案

评论指出原子数据更改应由数据库管理这一事实。在大多数现代关系数据库中,有一些工具可以帮助解决这个问题,例如事务、外键、复合键和约束。 Eloquent 和查询构建器都对上述所有内容提供了一些支持。

使用事务,您可以在读/写数据时锁定一个或多个数据库表。如果发生故障,所有更改都可以回滚。这意味着您可以执行多个相关操作/更改,并保证它们将一起失败/成功,并且在该事务期间不会发生外部数据更改。

因为您不受限于单小时预订,所以简单的组合键将不起作用,但您可以使用事务来查询空位是否可用,然后在同一事务中预订空位。这将通过 laravel/qb 与多个 rdb 实现兼容。

另一种可能更高效的方法是使用具有唯一约束的复合键,并仅在幕后预订多个 1 小时时段 - 这会将预订时间限制为您使用的任何预订单位的倍数,例如 1 小时单位不允许对于 1 1/2 小时的预订,您需要 30 分钟的单位

laravel transactions

laravel create composite indexes

关于php - 使用 laravel 处理预订系统中的并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44811668/

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