Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel递减列值,但不为负值_Php_Laravel_Laravel 5_Eloquent_Laravel 5.2 - Fatal编程技术网

Php Laravel递减列值,但不为负值

Php Laravel递减列值,但不为负值,php,laravel,laravel-5,eloquent,laravel-5.2,Php,Laravel,Laravel 5,Eloquent,Laravel 5.2,我知道我可以使用此查询减少laravel中的列值 DB::table('users')->decrement('votes', 5); 但是我想限制这个值,使之不变成负值 对于laravel,还有其他方法可以这样做吗?您需要使用原始查询 以下代码适用于支持最大功能的所有DB引擎: DB::table('users')->update(['votes' => DB::raw('GREATEST(votes - 5, 0)')]); 它会将用户表中的投票数列减少5,但不会低于零

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

DB::table('users')->decrement('votes', 5);
但是我想限制这个值,使之不变成负值


对于laravel,还有其他方法可以这样做吗?

您需要使用原始查询

以下代码适用于支持最大功能的所有DB引擎:

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

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

如果您真的想在这种情况下使用减量(例如,如果您通过关系访问它,可能会很方便),您可以执行以下操作:

$thing->decreation('投票',$thing->投票-$amount投票:$amount)

其中,
$amount
在您的案例中是5。在我看来,这很难看。值得注意的是,如果您已经拥有$thing(比如通过关系),那么在访问投票时它不会触发额外的查询

如果仅递增1,则简单的
If环绕会更干净:

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

将迁移中的投票字段声明为unsignedInteger,即$table->unsignedInteger(“投票”);感谢@BalrajAllam的回复。但我有一个小问题。在这种情况下,上述代码将返回false?不,它只是不允许投票列中出现负值。