Как обновить определенные столбцы только на основе значения HTML-формы в Laravel 7

#mysql #database #laravel #sql-update #crud

#mysql #База данных #laravel #sql-обновление #crud

Вопрос:

Я пытаюсь обновить определенные столбцы таблицы базы данных на основе моего текстового значения ввода HTML-формы. В моем OrderHistoryController случае я разрешаю клиентам отменять заказ для моего проекта веб-сайта электронной коммерции. Таким образом, я обновляю статус и cancel_notes столбцы. Я смог это сделать.

В моем контроллере у меня есть этот метод отмены:

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

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

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

    // send mail to customer that order was completed
     Mail::to($order->user->email)->send(new OrderCanceled($order));


    return redirect('/order-history')->withMessage('Order was canceled');
}
  

Как я могу изменить эту строку $order->update(['cancel_notes'=>'cancel_notes']); , чтобы извлекать текстовое значение из моего текстового поля ввода ‘cancel_notes’ вместо того, чтобы иметь буквальное значение ‘cancel_notes’ при обновлении?

Заранее большое спасибо! 🙂

Ответ №1:

Предположим, у вас есть форма, в которой пользователь записывает заметки об отмене, в этом случае вы можете сделать

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

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

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

    // send mail to customer that order was completed
     Mail::to($order->user->email)->send(new OrderCanceled($order));


    return redirect('/order-history')->withMessage('Order was canceled');
}
  

Я предполагаю, что ваше входное имя будет cancel_notes

Другой способ сделать это вместо ввода Request класса вы можете использовать request() вспомогательную функцию следующим образом request('cancel_notes')