Мне было интересно, как это сделать:
Table::update(array('position'=>'position+1'));
Насколько я знаю, laravel 4 управляет «позицией + 1» в виде строки, поэтому становится 0.
Я хочу выполнить что-то вроде
UPDATE table SET position = position + 1
Могу ли я сделать это с помощью красноречивого?
EDIT: nevermind, doh .. "DB :: table ('users') -> increment ('votes');"
Просто используйте метод 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 ));
вы также можете сделать с 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')]);
Это отлично сработало для меня
\Models\User::where("id", $userId)->increment("points");
просто вы можете использовать DB :: raw метод следующим образом: Table::update(DB::raw('position=position+1'));