Laravel:同一页面上的更新无效

时间:2018-04-14 17:03:28

标签: php laravel sql-update

所以我对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 &raquo;</button>
        </form>

我尝试使用laravel创建一个简单的测验,之后我希望代码将输入字段中的数字添加到数据库中的points-column。 有人知道它为什么不起作用吗?我没有得到一个PHP错误它只是不会更新我的数据库:(

因为基本上不知道我在这里做什么是我的git存储库,如果它有帮助:

https://github.com/dirtypaulmfz/Quiztopher.git

感谢您的帮助!

1 个答案:

答案 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模型。