#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:
Здесь несколько вещей:
- Ваша
scopeAllLinks
область действия неверна, вы не вызываетеget
внутри области, вместо этого вы возвращаете экземпляр построителя запросов. - Вы можете использовать
find
, поскольку вы передаете идентификатор записи:$link = RedirectUrl::find($id);
- Вы никогда не вызываете save или update для записи:
$link->value = $request->input('value');
$link->save(); // <--- add this