Laravel通过添加新值来雄辩地更新列值

时间:2017-12-06 18:05:37

标签: php laravel eloquent

我正在使用updateOrCreate()方法更新当前用户的点:

   $point->updateOrCreate(
        ['user_id' => auth()->id()],
        ['score' => request('totalScore')]
    );

如果request('totalScore')为50,列score的当前值为10,我希望update为60.但正如您所看到的,上述方法直接取代10与50。

Google搜索返回的结果包含查询构建器的increment()方法。但我不必在整个应用程序中使用查询构建器。我为什么要现在用它?是否可以使用Eloquent方法更新值?

2 个答案:

答案 0 :(得分:1)

  

“由于Eloquent模型是查询构建器,因此您应该查看查询构建器上可用的所有方法。您可以在Eloquent查询中使用这些方法中的任何一种。”

     

Laravel 5.5 Docs - Eloquent - Retrieving Models

您可以使用Eloquent来使用任何Query Builder方法或任何Eloquent特定方法。

答案 1 :(得分:0)

以前的回答有问题(见评论)。所以我不得不想出另一个解决方案。我在模型中创建了一个名为updateOrCreateAndIncrement()的{​​{3}}:

public function scopeUpdateOrCreateAndIncrement($query, $totalScore){
        if(!$query->where('user_id',auth()->id())->first()){
            $query->create(['user_id' => auth()->id(), 'score' => $totalScore]);
        } else {
            $query->where('user_id',auth()->id())->increment('score', $totalScore);
        }
    }

在控制器update()方法中,我可以轻松调用$point->updateOrCreateAndIncrement()

public function update(Request $request, Points $point){
    $point->updateOrCreateAndIncrement(request('totalScore'));
}
相关问题