web-dev-qa-db-ja.com

laravel 4:行を更新するときに列の現在の値から1を引く方法は?

私はこのようなことをどのように実行するのか疑問に思いました:

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

私の知る限り、laravel 4は 'position + 1'を文字列として処理するため、0になります。

こんなことをしたい

UPDATE table SET position = position + 1

雄弁にそれを行うことはできますか?

編集:気にしないでください、doh .. "DB :: table( 'users')-> increment( 'votes');"

16
Meddie

incrementメソッドを使用するだけです。

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

同じことがdecrementにも当てはまります。

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

2番目のパラメーターを加算/減算する量に設定することもできます。

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

また、他の列を一緒に更新する必要がある場合は、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
));
45
rmobis

次のような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')]);
6
utsav

これは私にとってはうまくいきました

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