[英]Laravel eager loading problem. How do I fix the N+1 warning that I'm getting?
[英]Fix the Laravel concurrency problem. Between if condition and insert eloquent
PHP版本: 7.2.4
Laravel版本: 5.8.34
MySQL 版本: 5.6.41
MySQL 服务器类型: MySQL
MySQL 表存储引擎: InnoDB
描述:
这些代码中存在并发:
...
$orderExist = Order::where('address', $address)
->where('order_status', 'open')
->where('type', 'bulk')
->where('way', 'site')
->whereDate('created_at', '>=', Carbon:today())
->whereNull('deleted_at')
->exists();
if (!$orderExist) {
$order = Order::create([
'admin_id' => auth()->user()->id,
'address' => $address,
'status' => 'open',
'type' => 'bulk',
'way' => 'site',
]);
} else {
return 'duplicate_order';
}
OrderProduct::create([
'order_id' => $order->id,
'product_id' => $product->id,
'count' => $request->count,
'unit_id' => $product->unit_id,
'brand_id' => $product->brand_id,
]);
...
代码告诉我们:如果orders
表中有特殊订单,则返回。 但如果没有特殊订单,请创建一个新订单,然后为该新订单插入新产品。
但有时两个请求会在orders
表中同时插入两个重复订单。
我找到了这些方法:
if
条件。 如果其中一些查询失败并且与解决并发问题无关,它也与回滚多个查询有关INSERT … ON DUPLICATE KEY UPDATE
查询:它查询导致运行两个请求。 因此,关于并发问题是不正确的。请帮我解决这个并发问题。
也许GET_LOCK()
和RELEASE_LOCK()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.