2015-04-23 35 views
9

C'è un modo per incrementare più di una colonna in laravel?colonne di incremento in laravel

Diciamo:

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

Ma questo risultati per:

Call to a member function increment() on integer

voglio solo trovare un modo efficace per farlo utilizzando le funzioni date da laravel. Grazie. Qualsiasi suggerimento farà.

risposta

22

Non esiste alcuna funzione esistente per eseguire questa operazione. Devi usare 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

Prima di tutto, il risultato di increment è un intero in base alla documentazione: http://laravel.com/api/4.2/Illuminate/Database/Query/Builder.html

Così si dovrebbe fare una chiamata per ogni incremento:

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

Sono in grado di trovare qualsiasi soluzione più veloce, a meno che tu non voglia risolverlo con un comando di query di aggiornamento non elaborato.

Anche il codice di esempio genererà probabilmente un errore dopo aver chiuso l'istruzione con ; e continuare con una nuova chiamata ->increment nella riga successiva.

+1

Ciao, grazie per la vostra reponse veloce. ma è così efficiente? da quando lo chiami 4 volte? scusa ho modificato il mio post su quel punto e virgola in più – Vainglory07

+0

No, vedere il mio aggiornamento; un comando di aggiornamento non elaborato è più efficiente. La domanda è che la consideri una soluzione o meno. – Luceos

+0

lo considero, ma forse qualsiasi altra soluzione che posso eseguire una volta. – Vainglory07

6

Per riferimento futuro in 5.2 è stato fatto fare grado nel modo seguente

È inoltre possibile specificare ulteriori colonne per aggiornare durante l'operazione:

DB :: table ('users') -> increment ('voti', 1, ['nome' => 'Giovanni']);

Fonte: https://laravel.com/docs/5.2/queries#updates