【发布时间】:2020-08-25 19:35:18
【问题描述】:
在 Laravel 中,我正在运行以下命令
PlateOrder::firstOrCreate(
['internal_order' => $internalOrder],
['internal_order' => $internalOrder,
'order_number' => $order->order_number, 'product' => $line_item->name,
'img_url' => $plate->template, 'template' => 1,
'order_date' => $fixedDate,
'qty' => $line_item->quantity,
'custom1' => $firstLineTrimmed,
'custom2' => $secondLineTrimmed,
'created_at' => $order->created_at,
'r' => $plate->r, 'g' => $plate->g, 'b' => $plate->b,
'spacing' => $plate->spacing, 'top' => $plate->top ]
);
使用 firstOrCreate 第一个参数 internal_order 将检查它是否存在。如果它存在,它会更新它,如果它不应该创建它。 但是在我的数据库中,它会导致它重复写入。
84826 142544 1425441HIGHMARK2 08-25-2020 HIGHMARK VINYLS NULL NULL Colorado Plate Hat - Flex Fit / L/XL (7 1/4" - 7 5/8") / Black FF prt_Colorado.ai NULL 2 NULL 2020-08-25T05:47:14-07:00 1 0 77 41 38 86
84827 142544 1425441HIGHMARK2 08-25-2020 HIGHMARK VINYLS NULL NULL Colorado Plate Hat - Flex Fit / L/XL (7 1/4" - 7 5/8") / Black FF prt_Colorado.ai NULL 2 NULL 2020-08-25T05:47:14-07:00 1 0 77 41 38 86
它创建一个相同的记录,除了 id。这是一个错误还是我错过了什么?
【问题讨论】:
-
恭喜;你已经经历了你的第一个 mysql 竞态条件!为确保 100% 不会发生这种情况,我将在
internal_order上的数据库中添加一个唯一键 -
唯一键会在php端的什么地方生成?如果是这样,则此示例中的键“1425441HIGHMARK2”是唯一的。
-
firstOrCreate不更新。$internalOrder变量实际上是什么?? -
它包含一个唯一的字符串“1425441HIGHMARK2”,所以首先或创建应该检查它是否存在,如果找到它会做什么? @zahidhasanemon
-
它只是返回匹配的记录..可能是你在别处做错了
标签: laravel