每次提交订单之后立即就被关闭了?

没有显示任何错误,不知道是不是laravel的bug,env里面设置redis了,tinker里面dd也能打印出来是redis,还需要在config/app里面设置redis的连接吗?代码如下
CloseOrder.php

class CloseOrder implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $order;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(Order $order,$delay)
    {
        $this->order = $order;
        $this->delay($this->delay);
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        if($this->order->paid_at){
            return;
        }

        DB::transaction(function (){
            $this->order->update(['closed'=>true]);
            foreach ($this->order->items as $item){
                $item->productSku->increaseStock($item->amount);
            }
        });
    }
}

OrdersController.php

class OrdersController extends Controller
{
    public function store(OrderRequest $request){
        $user = $request->user();
        //开启一个数据库事务
        $order = DB::transaction(function () use ($user ,$request){
            $address = UserAddress::find($request->input('address_id'));
            $address->update(['last_used_at'=>Carbon::now()]);
            $order = new Order([
                'address'      => [ // 将地址信息放入订单中
                    'address'       => $address->full_address,
                    'zip'           => $address->zip,
                    'contact_name'  => $address->contact_name,
                    'contact_phone' => $address->contact_phone,
                ],
                'remark'=> $request->input('remark'),
                'total_amount'=>0,
            ]);
            $order->user()->associate($user);
            $order->save();

            $total_amount = 0;
            $items = $request->input('items');
            foreach ($items as $data){
                $sku = ProductSku::find($data['sku_id']);
                $item = $order->items()->make([
                    'amount'=> $data['amount'],
                    'price' => $sku->price,
                ]);

                $item->product()->associate($sku->product);
                $item->productSku()->associate($sku);
                $item->save();
                $total_amount += $sku->price * $data['amount'];
                if($sku->decreaseStock($data['amount']) <= 0){
                    throw new InvalidRequestException('库存不足');
                }
            }

            $order->update(['total_amount'=>$total_amount]);

            $skuIds = collect($request->input('items'))->pluck('sku_id');
            $user->cartItems()->whereIn('product_sku_id', $skuIds)->delete();

            return $order;

        });

        $this->dispatch(new CloseOrder($order,config('app.order_ttl')));

        return $order;
    }
}
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
leo
最佳答案
$this->delay($this->delay);

这里错了

5年前 评论
讨论数量: 2
leo
$this->delay($this->delay);

这里错了

5年前 评论

@leo 抱歉,这里疏忽了,感谢感谢 :grin:

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!