Подтвердить что ты не робот

Laravel 4: как вычесть из текущего значения столбца при обновлении строк?

Мне было интересно, как выполнить что-то вроде этого:

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

Насколько я знаю, laravel 4 управляет "позицией + 1" в виде строки, поэтому становится 0.

Я хочу выполнить что-то вроде

UPDATE table SET position = position + 1

Могу ли я сделать это с помощью красноречивого?

EDIT: nevermind, doh.. "DB:: table ('users') → increment ('votes');"

4b9b3361

Ответ 1

Просто используйте метод 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
));

Ответ 2

вы также можете использовать метод 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')]);

Ответ 3

Это сработало отлично для меня

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

Ответ 4

просто вы можете использовать DB:: raw метод следующим образом: Table::update(DB::raw('position=position+1'));