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');"
Ответы
Ответ 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'));