2015-04-23 1 views
9

Есть ли способ увеличить количество столбцов в laravel?Увеличение столбцов в laravel

Скажем:

DB::table('my_table') 
->where('rowID', 1) 
->increment('column1', 2) 
->increment('column2', 10) 
->increment('column3', 13) 
->increment('column4', 5); 

Но это приводит к:

Call to a member function increment() on integer

Я просто хочу, чтобы найти эффективный способ сделать это, используя заданные функции от Laravel. Благодарю. Любые предложения сделают.

ответ

22

Для этого не существует существующей функции. Вы должны использовать update():

DB::table('my_table') 
    ->where('rowID', 1) 
    ->update([ 
     'column1' => DB::raw('column1 + 2'), 
     'column2' => DB::raw('column2 + 10'), 
     'column3' => DB::raw('column3 + 13'), 
     'column4' => DB::raw('column4 + 5'), 
    ]); 
4

Во-первых, результат increment является целое число в соответствии с документацией: http://laravel.com/api/4.2/Illuminate/Database/Query/Builder.html

Так вы должны сделать вызов для каждого шага:

DB::table('my_table') 
->where('rowID', 1) 
->increment('column1', 2); 
DB::table('my_table') 
->where('rowID', 1) 
->increment('column2', 10); 
DB::table('my_table') 
->where('rowID', 1) 
->increment('column3', 13); 
DB::table('my_table') 
->where('rowID', 1) 
->increment('column4', 5); 

Я не могу найти какой-либо более быстрое решение, если вы не решите его с помощью команды необработанного запроса на обновление.

Также ваш код примера, вероятно, сгенерирует ошибку, поскольку вы закрыли оператор с помощью ; и продолжаете новый вызов ->increment на следующей строке.

+1

привет, спасибо за ваш быстрый réponse. но является ли это эффективным? так как вы называете это 4 раза? жаль, что я отредактировал мое сообщение о том, что добавочная точка с запятой – Vainglory07

+0

Нет, см. мое обновление; команда raw update более эффективна. Вопрос в том, считаете ли вы это решением или нет. – Luceos

+0

Я рассматриваю это, но, возможно, любое другое решение, которое я могу запустить его один раз. – Vainglory07

6

Для дальнейшего использования в 5.2 это было сделано сделать в состоянии, выполнив следующие действия

Вы также можете указать дополнительные столбцы для обновления во время операции:

БД :: table ('users') -> increment ('votes', 1, ['name' => 'John']);

Источник: https://laravel.com/docs/5.2/queries#updates