【问题标题】:laravel 4: how to subtract one from current value of column when updating rows?laravel 4:更新行时如何从列的当前值中减一?
【发布时间】:2013-10-18 21:18:58
【问题描述】:

我想知道如何执行这样的操作:

Table::update(array('position'=>'position+1'));

据我所知,laravel 4 将 'position+1' 作为字符串处理,因此 is 变为 0。

我想执行类似的操作

UPDATE table SET position = position + 1

我可以用 eloquent 做到这一点吗?

编辑:没关系,doh.."DB::table('users')->increment('votes');"

【问题讨论】:

    标签: php laravel laravel-4 eloquent


    【解决方案1】:

    你也可以像这样使用 DB::raw 方法:

    DB::table('tablename')->where(your condition)->update(['position' => DB::raw('position+1')]);
    

    你也可以用这个来做其他操作

    DB::table('tablename')->where(your condition)->update(['position' => DB::raw('position * 2')]);
    

    【讨论】:

      【解决方案2】:

      这对我来说很好用

      \Models\User::where("id", $userId)->increment("points");
      

      【讨论】:

      • 这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
      • 好吧,我的答案建立在已经为那些寻求增加单个记录的人给出的答案之上。它生成这个查询 UPDATE table SET position = position + 1 Where id = 1
      【解决方案3】:

      你可以像这样使用 DB::raw 方法: Table::update(DB::raw('position=position+1'));

      【讨论】:

        【解决方案4】:

        只需使用increment 方法:

        DB::table('users')->increment('position');
        

        同样适用于decrement:

        DB::table('users')->decrement('rank');
        

        您甚至可以将第二个参数设置为您要加/减的数量:

        DB::table('users')->increment('posts', 5);
        DB::table('users')->decrement('likes', 3);
        

        另外,如果您需要更新其他列,请将其作为第三个参数传递:

        DB::table('users')->increment('range', 3, array(
            'name' => 'Raphael',
            'rank' => 10
        ));
        

        Eloquent 模型也是如此:

        $firstUser = User::find(1);
        $firstUser->increment('height', 0.1, array(
            'active' => false
        ));
        

        【讨论】:

        • 我有个问题要问,如果我想在增加或减少后检查结果怎么办?比如检查结果是 0 还是负数?
        • @Ben 为什么不在增量前检查?调整逻辑就行了?
        • @rmobis 这就是原因,因为我增加数量后只能知道超过库存数量,如果存在则无法购买..这就是为什么我必须先增加然后检查,但请确保您的登录名正确,只是我不确定如何从数据库中获取数字并进行比较..:)
        • @Ben Dude,这没有任何意义。假设你有x,你将它加1。现在你想检查是否x > y。这与在递增之前检查 x + 1 > y 是否相同。这是正确的逻辑。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-02
        • 1970-01-01
        • 2019-04-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多