Laravel - 重复录入

时间:2018-03-28 07:37:39

标签: php laravel laravel-5 laravel-4

我正在建立一个系统,在这个系统中,我有一段代码,它使用created_at字段检查最新的“Order”,并检查最新的“Order_nr”,并在创建新的时候创建{ {1}} +1。这是我正在谈论的代码

order_nr

这使得每个订单号都是唯一的。当我为数据库播种时,时间戳都是一样的。现在,当我尝试通过执行上面的代码保存订单时,我收到以下错误:

  

SQLSTATE [23000]:完整性约束违规:1062键'order_order_nr_unique'的重复条目'#00000002'(SQL:插入$order = new Order; $order->user_id = Auth()->id(); $latestOrder = Order::orderBy('created_at', 'DESC')->first(); $order->order_nr = '#'.str_pad($latestOrder->id + 1, 8, "0", STR_PAD_LEFT); $order->sub_total = $subtotal; $order->vat = $vat; $order->price_sum = $priceSum; $order->save(); ordersuser_id,{{1 }},order_nrsub_totalvatprice_sum)值(1,#00000002,18.12,3.8052,21.9252,2018-03-28 07:30:51 ,2018-03-28 07:30:51))

当我将最新订单的时间更改为一秒后,代码工作正常。我怎么解决这个问题?执行此操作的最佳方法是什么?

3 个答案:

答案 0 :(得分:0)

使用此

我认为你的网站一次有很多用户,而且一个用户想要一次订购,所以我建议使用一些随机数然后绑定id

$latestOrder = rand() . Order::orderBy('id', 'DESC')->first();

答案 1 :(得分:0)

一种选择是使用count()

std::cin

另一个选择是按ID DESC排序:

$order = new Order;
$order->user_id = Auth()->id();
$totalOrder = Order::orderBy('created_at', 'DESC')->count();
$order->order_nr = '#'.str_pad($totalOrder + 1, 8, "0", STR_PAD_LEFT);
$order->sub_total = $subtotal;
$order->vat = $vat;
$order->price_sum = $priceSum;
$order->save();

答案 2 :(得分:0)

如果order by的值相同,则SQl查询会维护原始订单,因此您的查询不会为您提供最后一条记录,而是为您提供第一行表格。

尝试自动递增order_nr或者不是先使用desc命令,找到order_nr的最大值然后再做+1