【发布时间】:2022-10-01 00:40:25
【问题描述】:
我正在为我的订单模型创建功能运行 DB::transaction。
创建订单后,我希望能够为该订单创建多个历史项目。
我的代码如下所示:
Class DataController {
public function create () {
$order = null;
DB::transaction(function) use(&$order $data) {
$newHistory = [
\'order_id\' => $order->id,
\'text\' => \'Order created\'
];
info(\'should_trigger_first\');
$order = order::create([$data]);
$order->histories()->save(new OrderHistory($newHistory));
});
sleep(1); // This works but it doesn\'t make sense
if ($request->get(\'itemsFromOrder\')) {
$this->processAllItemsFromOrder($request, $order->id);
}
}
// In same class
private function processAllItemsFromOrder($request, $id) {
foreach ($request->get(\'itemsFromOrder\') as $item) {
$order = Order::find($id);
info(\'should_trigger_second\');
$newHistory = [
\'order_id\' => $order->id,
\'text\' => \'Order item created\'
];
$order->histories()->save(newOrderHistory([$newHistory]));
}
}
}
不知何故,我的订单项目的历史记录是首先创建的,即使交易应该事先执行。
我什至检查了数据库,不知何故,第二个历史项目的创建时间早于第一个项目
数据库如下所示:
- 订单项已创建 - created_at: 10:28:23
- 订单创建 - created_at: 10:28:24
- 订单项已创建 - created_at: 10:28:24
标签: laravel asynchronous eloquent model transactions