2015-04-23 12 views
9

Gibt es eine Möglichkeit, mehr als eine Spalte in Laravel zu erhöhen?Spalten in Laravel erhöhen

Sagen wir:

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

Aber dies führt zu:

Call to a member function increment() on integer

Ich möchte nur eine effiziente Art und Weise zu finden, das die gegebenen Funktionen von Laravel mit zu tun. Vielen Dank. Irgendwelche Vorschläge werden tun.

Antwort

22

Es gibt keine vorhandene Funktion, um dies zu tun. Sie haben update() verwenden:

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

Zunächst einmal, das Ergebnis increment ist eine ganze Zahl entsprechend die Dokumentation: http://laravel.com/api/4.2/Illuminate/Database/Query/Builder.html

So würden Sie einen Anruf für jeden Teilbereich zu tun haben:

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

Ich bin nicht in der Lage jeden zu finden schnellere Lösung, es sei denn, Sie möchten es mit einem rohen Aktualisierungsabfragebefehl lösen.

Auch Ihr Beispielcode wird wahrscheinlich einen Fehler erzeugen, da Sie die Anweisung mit ; geschlossen haben und mit einem neuen ->increment Aufruf in der nächsten Zeile fortfahren.

+1

hallo, danke für deine schnelle reponse. Aber ist das effizient? seit du es 4 mal nennst? Entschuldigung, ich habe meine Post über dieses zusätzliche Semikolon bearbeitet – Vainglory07

+0

Nein, siehe mein Update; Ein roher Update-Befehl ist effizienter. Die Frage ist, ob Sie dies als Lösung betrachten oder nicht. – Luceos

+0

ya ich betrachte es, aber vielleicht eine andere Lösung, die ich einmal ausführen kann. – Vainglory07

6

Für die Zukunft in 5.2 es tun können gemacht wurde das, indem Sie folgende

Sie können auch zusätzliche Spalten angeben, die während der Operation zu aktualisieren:

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

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