18

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

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');”

4

4 回答 4

47

只需使用以下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
));
于 2013-10-11T01:18:47.143 回答
7

你也可以像这样使用 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')]);
于 2016-01-21T09:53:12.907 回答
2

这对我来说很好

\Models\User::where("id", $userId)->increment("points");
于 2015-04-20T14:40:49.647 回答
-2

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

于 2015-03-17T11:36:26.583 回答