Как обновить статус заказа пользователем в Laravel 7

#laravel #e-commerce #crud

#laravel #электронная коммерция #crud

Вопрос:

Я создаю веб-сайт электронной коммерции и пытаюсь завершить управление заказами для обычных пользователей / клиентов. Я хочу разрешить клиенту отменить заказ, если статус все еще находится на рассмотрении. У меня есть 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
  

Что я хочу сделать, это обновить статус в моей Order таблице с «ожидающий» на «отмененный» после нажатия кнопки. Когда я это делаю, я перенаправляюсь на страницу localhost: 8000 / история заказов / отмена

 404|Not Found
  

В чем, по-видимому, проблема? Или есть какой-либо другой способ, которым я могу это сделать? Любые советы будут высоко оценены. Заранее спасибо!

Ответ №1:

Вам не хватает идентификатора заказа в вашем маршруте, поэтому измените:

 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');