2013-03-25 10 views
18

Ich muss alle Zeilen in einer Datenbank aktualisieren, so dass ein bestimmtes Feld in alle von ihnen ist gleich einem einzelnen Wert. Hier ist ein Beispiel.Wie wird jede Zeile mit Laravel's Eloquent/Fluent auf denselben Wert gesetzt?

Lassen Sie uns sagen, dass meine Datenbanktabelle ist wie folgt:

id | data | confirmed 
1  | someData |  0 
2  | someData |  1 
3  | someData |  0 

ich eine Abfrage ausgeführt werden soll, die das bestätigt Feld jeder Zeile setzt auf 1.

ich es auf diese Weise tun könnte:

$rows = MyModel::where('confirmed', '=', '0')->get(); 
foreach($rows as $row) { 
    $row->confirmed = 0; 
    $row->save(); 
} 

Aber es scheint, als gäbe es einen besseren Weg? Eine einzelne Abfrage, die nur sagen würde: "Setze das bestätigte Feld jeder Zeile auf 1".

Existiert eine solche Abfrage in Laravels Eloquent/Fluent?

Antwort

37

Nun, eine einfache Antwort: Nein, Sie können nicht mit eloquent. Ein Modell repräsentiert 1 Zeile in der Datenbank, es würde keinen Sinn ergeben, wenn sie dies implementieren würden.

Allerdings gibt es eine Möglichkeit, dies mit fließend zu tun:

$affected = DB::table('table')->update(array('confirmed' => 1)); 

oder noch besser

$affected = DB::table('table')->where('confirmed', '=', 0)->update(array('confirmed' => 1)); 
11

Sie können dies tun mit elquent (Laravel 4):

MyModel::where('confirmed', '=', 0)->update(['confirmed' => 1]) 
23

Um diesen Thread aktuell zu halten, können Sie alle Zeilen direkt mit einem Eloquent-Modell aktualisieren:

Model::query()->update(['confirmed' => 1]); 
+0

Dies ist, was ich suche! Vielen Dank! –