如何在Laravel 7中按用户更新订单状态

如何在Laravel 7中按用户更新订单状态,laravel,e-commerce,crud,Laravel,E Commerce,Crud,我正在制作一个电子商务网站,并试图为普通用户/客户完成订单管理。我想允许客户取消订单,如果状态仍然是挂起。我有一个带有以下内容的OrderHistoryController: public function cancel(Order $order) { $order->status = 'canceled'; $order->save(); //check if all suborders are canceled $pendingSubOrders

我正在制作一个电子商务网站,并试图为普通用户/客户完成订单管理。我想允许客户取消订单,如果状态仍然是挂起。我有一个带有以下内容的
OrderHistoryController

public function cancel(Order $order)
{
    $order->status = 'canceled';
    $order->save();

    //check if all suborders are canceled
    $pendingSubOrders = $order->subOrders()->where('status','!=', 'canceled')->count();

    if($pendingSubOrders == 0) {
        $order->order()->update(['status'=>'canceled']);
    }

    return redirect('/order-history/{order}')->withMessage('Order was canceled');
}
我在我的web.php中创建了一条路线:

Route::get('/order-history/cancel', 'OrderHistoryController@cancel')->name('order-history.cancel')->middleware('auth');
我的刀片文件有一个按钮:

 @if ($order->status == 'pending')
 <button type="submit" class="default-btn floatright"><a href="{{route('order-history.cancel', $order)}}"> Cancel Order</a></button>
 @endif

有什么问题吗?或者我还有其他方法可以做到这一点吗?任何建议都将不胜感激。提前谢谢

您的路线中缺少订单id,因此请更改:

Route::get('/order-history/cancel', 'OrderHistoryController@cancel')->name('order-history.cancel')->middleware('auth');

Route::get('/order-history/cancel', 'OrderHistoryController@cancel')->name('order-history.cancel')->middleware('auth');
Route::get('/order-history/cancel/{order}', 'OrderHistoryController@cancel')->name('order-history.cancel')->middleware('auth');