Не удается обновить данные базы данных. Laravel

#php #mysql #laravel

#php #mysql #laravel

Вопрос:

У меня небольшая проблема с действием моего контроллера. Я не могу обновить свою «ссылку» в базе данных, dd метод bt работает правильно, когда я пытаюсь проверить данные.

Форма

 <form class="col-lg-push-6" action="/admin/links/{{$link->id}}/update" method="POST">
            @csrf
            <div class="form-group bmd-form-group">
                <label class="bmd-label-floating">New Link Value</label>
                <input type="text" class="form-control" size="100" name="value">
                <button  class="btn btn-primary" type="submit">Update</button>
            </div>
        </form>
 

Контроллер

 public function update(Request $request, $id)
{

    $this->validate($request, [
        'value' => 'required'
    ]);

    $link=RedirectUrl::AllLinks()->where('id', $id);
    $link->value = $request->input('value');

    



    return redirect()->back()->with('message', 'Link Updated!');
  }
 

Модель

  public function scopeAllLinks($query){

    return $query->get();

}
 

Маршрут

 Route::prefix('admin')->middleware('auth')->group(function(){
Route::get('/', 'AdminIndexController@index');
Route::get('dashboard', 'AdminIndexController@index')->name('dashboard');
Route::get('links', 'AdminLinkController@index')->name('links');
Route::get('links/{id}', 'AdminLinkController@linkById');
Route::post('links/{id}/update', 'AdminLinkController@update');

});
 

Комментарии:

1. Вы никогда не сохраняете его.

2. @aynber что я делаю не так?

3. Читать laravel.com/docs/8.x/eloquent#updates : Во-первых, вы используете только where so $link — объект построителя запросов, а не отдельную модель. И вы никогда не сохраняете его.

Ответ №1:

Здесь несколько вещей:

  1. Ваша scopeAllLinks область действия неверна, вы не вызываете get внутри области, вместо этого вы возвращаете экземпляр построителя запросов.
  2. Вы можете использовать find , поскольку вы передаете идентификатор записи:

    $link = RedirectUrl::find($id);

  3. Вы никогда не вызываете save или update для записи:

    $link->value = $request->input('value');

    $link->save(); // <--- add this