我正在使用updateOrCreate()方法更新当前用户的点:
$point->updateOrCreate(
['user_id' => auth()->id()],
['score' => request('totalScore')]
);
如果request('totalScore')
为50,列score
的当前值为10,我希望update
为60.但正如您所看到的,上述方法直接取代10与50。
Google搜索返回的结果包含查询构建器的increment()方法。但我不必在整个应用程序中使用查询构建器。我为什么要现在用它?是否可以使用Eloquent方法更新值?
答案 0 :(得分:1)
“由于Eloquent模型是查询构建器,因此您应该查看查询构建器上可用的所有方法。您可以在Eloquent查询中使用这些方法中的任何一种。”
您可以使用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'));
}