php artisan queue:work没有反应
按照上面的步骤,执行PHP artisan queue:work 没反应。
相关的配置代码如下:
.env
closeOrder类
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use App\Models\Order;
// 代表这个类需要被放到队列中执行,而不是触发时立即执行
class CloseOrder implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $order;
public function __construct(Order $order, $delay)
{
$this->order = $order;
// 设置延迟的时间,delay() 方法的参数代表多少秒之后执行
$this->delay($delay);
}
// 定义这个任务类具体的执行逻辑
// 当队列处理器从队列中取出任务时,会调用 handle() 方法
public function handle()
{
// 判断对应的订单是否已经被支付
// 如果已经支付则不需要关闭订单,直接退出
if ($this->order->paid_at) {
return;
}
// 通过事务执行 sql
\DB::transaction(function() {
// 将订单的 closed 字段标记为 true,即关闭订单
$this->order->update(['closed' => true]);
// 循环遍历订单中的商品 SKU,将订单中的数量加回到 SKU 的库存中去
foreach ($this->order->items as $item) {
$item->productSku->addStock($item->amount);
}
});
}
}
Orders中触发的代码:
public function store(OrderReuest $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();
$totalAmount = 0;
$items = $request->input('items');
// 遍历用户提交的 SKU
foreach ($items as $data) {
$sku = ProductSku::find($data['sku_id']);
// 创建一个 OrderItem 并直接与当前订单关联
$item = $order->items()->make([
'amount' => $data['amount'],
'price' => $sku->price,
]);
$item->product()->associate($sku->product_id);
$item->productSku()->associate($sku);
$item->save();
$totalAmount += $sku->price * $data['amount'];
if ($sku->decreaseStock($data['amount']) <= 0) {
throw new InvalidRequestException('该商品库存不足');
}
}
// 更新订单总金额
$order->update(['total_amount' => $totalAmount]);
// 将下单的商品从购物车中移除
$skuIds = collect($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;
}
config配置:
麻烦帮忙看一下,所有的关于这个问题的讨论都看了,都没有解决我的问题。
推荐文章: