2015-04-23 15 views
9

Czy istnieje sposób na zwiększenie więcej niż jednej kolumny w laravel?Przyrost kolumny w laravel

Powiedzmy:

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

Ale powoduje to, aby:

Call to a member function increment() on integer

Chcę tylko, aby znaleźć skuteczny sposób to zrobić przy użyciu podanych funkcji z laravel. Dzięki. Wszelkie sugestie zrobią.

Odpowiedz

22

Nie ma istniejącej funkcji do tego. Musisz użyć 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

Po pierwsze, wynik increment jest liczbą całkowitą, zgodnie z dokumentacją: http://laravel.com/api/4.2/Illuminate/Database/Query/Builder.html

Więc trzeba by zrobić połączenia za każde kolejne:

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); 

jestem w stanie znaleźć dowolny szybsze rozwiązanie, chyba że chcesz go rozwiązać za pomocą surowego polecenia aktualizacji.

Również twój kod przykładowy prawdopodobnie wygeneruje błąd, ponieważ zamknąłeś instrukcję z ; i kontynuujesz nową rozmowę ->increment w następnej linii.

+1

cześć, dzięki za szybką réponse. ale czy jest to skuteczne? skoro nazywasz to 4 razy? przepraszam redagowałem mój post o tym dodatkowym średniku – Vainglory07

+0

Nie, zobacz moją aktualizację; surowe polecenie aktualizacji jest bardziej wydajne. Pytanie brzmi: czy uważasz to za rozwiązanie, czy nie. – Luceos

+0

tak, rozważam to, ale może jakieś inne rozwiązanie, które mogę uruchomić raz. – Vainglory07

6

Na przyszłość w 5.2 został on zrobić stanie wykonując następujące

Można również określić dodatkowe kolumny, aby aktualizować w trakcie operacji:

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

Źródło: https://laravel.com/docs/5.2/queries#updates