Laravel: Обновление одного столбца в одной строке? - PullRequest
0 голосов
/ 22 октября 2019

Для школы мы должны сделать систему аренды лодок с использованием Laravel. Я новичок в Laravel и довольно плохо знаком с программированием в целом. В моем YachtsController у меня есть функция update, которая вызывается после редактирования всех значений яхты в моем файле edit.blade.php. Теперь я хочу, чтобы, если я нажму кнопку «аренда», она изменила статус яхт в базе данных с «Доступно» на «Недоступно». Как мне это сделать? Нужно ли создавать новую функцию для этого, называемую «аренда»?

Представление яхт:

{!! Form::open(['action' => ['YachtsController@update', $yacht->id], 'method' => 'POST']) !!}
   {{Form::hidden('_method', 'PUT')}}
   {{Form::submit('Rent',['class' => 'btn btn-primary'])}}
{!! Form::close() !!}

Контроллер яхт:

public function update(Request $request, $id)
    {
        $this->validate($request, [
            'name' => 'required',
            'yachttype-list' => 'required',
            'port-list' => 'required', 
            'status' => 'required',
            'code' => 'required'
        ]);

        $yacht = Yacht::find($id);
        $yacht->name = $request->input('name');
        $yacht->yacht_type_id = $request->input('yachttype-list');
        $yacht->port_id = $request->input('port-list');
        $yacht->status = $request->input('status');
        $yacht->code = $request->input('code');
        $yacht->save();

        return redirect('/yachts')->with('success', 'Yacht updated!');
    }

Так как мне сделать это? что если я отправлю форму, что статус будет изменен?

РЕДАКТИРОВАТЬ:

Поэтому я попытался сделать новую функцию под названием аренда:

Вид яхты:

{!! Form::open(['action' => ['YachtsController@rent', $yacht->id], 'method' => 'POST']) !!}
{{Form::hidden('_method', 'PUT')}}
{{Form::submit('Rent',['class' => 'btn btn-primary'])}}
{!! Form::close() !!}

Функция аренды YachtsController

    public function rent($id)
    {
        $yacht = Yacht::find($id);
        $yacht->status = "Unavailable";
        $yacht->save();
        return redirect('/yachts')->with('success', 'Yacht rented!');
    }

Маршрут:

Route::get('yachts/rent', 'YachtsController@rent');
Route::resource('yachts', 'YachtsController');

Теперь, когда я нажимаю кнопку «Аренда» на моем виде, кажется, что она все еще проверяет формув моей функции обновления, и это дает мне эту ошибку:

Ошибка

Ответы [ 2 ]

1 голос
/ 22 октября 2019

Причина, по которой вы получаете ошибки проверки при использовании метода update, заключается в том, что Laravel думает, что вы пытаетесь обновить целую яхту, ПОСТАВЛЯЯ на маршрут /yachts/{yacht id}. На самом деле вы хотите обновить конкретную яхту определенным образом (арендовать ее).

Лучший (на мой взгляд) способ сделать это - изменить маршруты, чтобы явно создать маршрут PUT с помощьюимя, которое вы затем можете использовать в форме:

Route::put('yachts/{id}/rent', 'YachtsController@rent')->name('yacht.rent');
Route::resource('yachts', 'YachtsController');

И тогда ваша форма может использовать новый именованный маршрут:

{!! Form::open(['route' => ['yacht.rent', $yacht->id], 'method' => 'POST']) !!}

, который должен ПОСТАВИТЬ вашу форму в правильный маршрут.

0 голосов
/ 22 октября 2019

Ваш метод яхты / аренды - это get, но, по вашему мнению, вы используете метод put. поэтому, когда ваша форма отправлена, она все еще идет в yacth / {id} с методом put (функция update). И в вашей функции обновления есть валидаторы, поэтому она выдает ошибку валидации.

мое решение - создать новоепоместите ссылку и теперь работайте без валидатора в ней ..

в вашем маршруте:

    Route::put('yachts/update_rent/{id}', 'YachtsController@update_rent')

в вашем контроллере:

    public function update_rent($id)
    {
        $yacht = Yacht::find($id);
        $yacht->status = "Unavailable";
        $yacht->save();
        return redirect('/yachts')->with('success', 'Yacht rented!');
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...