Laravel减少列值而不是负值

时间:2016-10-24 18:20:55

标签: php laravel laravel-5 eloquent laravel-5.2

我知道我可以使用此查询减少laravel中的列值

DB::table('users')->decrement('votes', 5);

但我想限制价值成为负值。

有没有用laravel来做这件事?

2 个答案:

答案 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');
        }