我将订单保存到我的数据库中,保存订单后我想获取订单ID以在确认屏幕上提取订单信息。
最新的订单ID是刚刚保存的订单ID,这一点非常重要。如果一次下达两个或多个订单,您如何确保检索到正确的ID。服务器响应时间慢可能会导致失败吗?
目前,我发现你可以做到以下几点;
$order = new Orders([
'billing_name' => $request->input('billing-name'),
'billing_company' => $request->input('company-name'),
'billing_job_title' => $request->input('job-title'),
'billing_phone' => $request->input('billing-phone'),
'billing_email' => $request->input('billing-email'),
'billing_address_1' => $request->input('billing-address-1'),
'billing_address_2' => $request->input('billing-address-2'),
'billing_town' => $request->input('billing-town'),
'billing_county' => $request->input('billing-county'),
'billing_postcode' => $request->input('billing-postcode'),
'payment_status' => 'Pending',
]);
$order->save();
$recentOrder = $order->id;
我想在我的控制器中使用最近保存的ID进一步查询。
答案 0 :(得分:1)
重定向到新页面后,您无法可靠地从数据库中获取ID。
您必须将其保存在某处,最好是在用户的会话中:
session(['orderId' => $order->id]);
然后在确认页面上检索它:
$order = Order::find(session('orderId'));
(不幸的是,我之前建议将订单ID添加到网址。这显然非常不安全,因为序列ID对于任何人来说都是微不足道的。)
答案 1 :(得分:0)
您可以在laravel中使用Transactions
,以确保您的查询不会像在同一时间那样执行,就像您确保在处理交易时,另一个不会在前一个处理之前执行完了......
要使用事务,请将代码包装在DB::transaction
中
这是你如何做到的:
DB::transaction(function () {
// you can use this if you don't have the last_order's ID
$last_row = DB::table('orders')->latest()->first();
// or you get your ID from the Create operation as you did.
});