2013-03-25 11 views
18

Muszę zaktualizować wszystkie wiersze w bazie danych, tak aby poszczególne pola w nich oznaczone były równe jednej wartości. Oto przykład.Jak ustawić każdy wiersz na tę samą wartość za pomocą Eloquent/Fluent Laravel?

Powiedzmy moja tabela bazy danych jest tak:

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

chcę wykonać kwerendę, która ustawia pole potwierdzoną każdego rzędu na 1.

mogłem zrobić to w ten sposób:

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

Ale wydaje się, że byłby lepszy sposób? Jedno zapytanie, które po prostu powie "pole" zatwierdzone dla każdego wiersza do 1. "

Czy takie zapytanie istnieje w Eloquent/Fluent Laravel?

Odpowiedz

37

Cóż, prosta odpowiedź: nie, nie można z wymową. Model reprezentuje 1 wiersz w bazie danych, nie miałoby sensu, gdyby to zaimplementowano.

Jednak istnieje sposób, aby zrobić to z płynną:

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

lub nawet lepiej

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

Można to zrobić z elquent (laravel 4):

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

Aby zachować bieżący wątek, można zaktualizować wszystkie wiersze do modelu Eloquent bezpośrednio za pomocą:

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

Tego właśnie szukam! Dzięki! –

Powiązane problemy