我知道我可以使用此查询减少laravel中的列值
DB::table('users')->decrement('votes', 5);
但我想限制价值成为负值。
有没有用laravel来做这件事?
答案 0 :(得分:4)
您需要使用原始查询。
以下代码应该为所有支持 GREATEST 功能的数据库引擎提供技巧:
DB::table('users')->update(['votes' => DB::raw('GREATEST(votes - 5, 0)')]);
它会将用户表中的投票列减少5,但不会低于零 - 这就是 GREATEST 功能用于
答案 1 :(得分:1)
如果您真的想在这种情况下使用减量(例如,通过关系访问它可能很方便),则可以执行以下操作:
$thing->decrement('votes', $thing->votes - $amount <= 0 ? $thing->votes : $amount);
在您的情况下,$amount
为5。我认为这很丑。值得一提的是,如果您已经拥有$ thing(例如通过某种关系),则在获取投票时不会触发其他查询。
如果仅增加1,则简单的if
会更干净:
if($thing->votes > 0) {
$thing->decrement('votes');
}