laravel 4:更新行时如何从列的当前值中减去一个?

时间:2013-10-10 22:18:46

标签: php laravel laravel-4 eloquent

我想知道如何执行这样的事情:

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

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

我想执行类似

的操作
UPDATE table SET position = position + 1

我可以使用雄辩吗?

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

4 个答案:

答案 0 :(得分:41)

只需使用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
));

答案 1 :(得分:4)

你也可以这样使用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 :(得分:2)

这对我来说很好用

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

答案 3 :(得分:-2)

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