所以我对Laravel很新,我试图用更新功能更新特定的数据库条目。我之前使用过这个功能,它总是工作正常,但不是这次,我无法弄清楚问题是什么。
我想这与我试图在同一页面上更新条目的事实有关? 这是我的代码:
控制器:
public function update(Request $request, Player $player)
{
request()->validate([
'points' => 'required'
]);
$player->update($request->all());
return redirect()->route('games.index')
->with('erfolgreich','Frage wurde erfolgreich geändert!');
}
查看:
<form method="POST" action="{{ route('games.update',$player->id) }}">
{{ csrf_field() }}
{{ method_field('PUT') }}
<input type="number" value="{{ $player->points }}" name="points" id="pointcounter">
<button type="submit" class="btn btn-primary m-3">Nächste Frage »</button>
</form>
我尝试使用laravel创建一个简单的测验,之后我希望代码将输入字段中的数字添加到数据库中的points-column。 有人知道它为什么不起作用吗?我没有得到一个PHP错误它只是不会更新我的数据库:(
因为基本上不知道我在这里做什么是我的git存储库,如果它有帮助:
https://github.com/dirtypaulmfz/Quiztopher.git
感谢您的帮助!
答案 0 :(得分:0)
问题是您在路线中定义的是Route::resource('games', 'GamesController')
。对于模型绑定,期望名为Game
的模型。它不会识别$player Player
。
因此,快速解决方案不是使用模型绑定:
public function update(Request $request, $id)
{
request()->validate([
'points' => 'required'
]);
Player::findOrFail($id)->update($request->all());
// Or, to reduce to 1 query:
// Player::where('id', $id)->update($request->only('points'));
return redirect()->route('games.index')
->with('erfolgreich','Frage wurde erfolgreich geändert!');
}
但是由于你实际上并没有构建一个CRUD应用程序,我不会在我的路由中使用Route::resource
方法,而是显式绑定它们。
将Route::resource('games', 'GamesController');
更改为:
Route::group(['prefix' => 'games', 'as' => 'games.'], function () {
Route::get('/', 'GamesController@index')->name('index');
Route::get('/winner', 'GamesController@winner');
Route::post('/', 'GamesController@store')->name('store');
Route::put('{player}', 'GamesController@update')->name('update');
});
^这样你就不需要改变控制器中的任何东西了。不同之处在于Route::put('{player}')
现在需要Player
模型,而不是Game
模型。