Laravel减少列值而不是负值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel减少列值而不是负值相关的知识,希望对你有一定的参考价值。

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

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

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

无论如何用laravel做到这一点?

答案

您需要使用原始查询。

以下代码应该为所有支持GREATEST功能的数据库引擎提供技巧:

DB::table('users')->update(['votes' => DB::raw('GREATEST(votes - 5, 0)')]);

它会将用户表中的投票列减少5,但不会低于零 - 这就是GREATEST函数的用途。

另一答案

如果你真的想在这种情况下使用减量(例如,如果你通过关系访问它可以很方便),你可以做类似的事情:

$thing->decrement('votes', $thing->votes - $amount <= 0 ? $thing->votes : $amount);

在你的情况下$amount是5。在我看来这很丑陋。值得注意的是,如果你已经拥有$ thing(比如通过关系),它在访问投票时不会触发额外的查询。

如果你只增加1,简单的if缠绕更清洁:

        if($thing->votes > 0) {
            $thing->decrement('votes');
        }

以上是关于Laravel减少列值而不是负值的主要内容,如果未能解决你的问题,请参考以下文章

如何减少 Laravel 中的列值

Laravel 插入默认值而不是通过请求发送的数据

在选择选项 laravel 上保存名称值而不是 id

实体框架递增列值而不查询它之前

Spring boot:仅访问 JPA 中的关联列值而不获取完整的关联实体

如何从结果集中打印值而没有列中的任何重复记录