2013-03-25 3 views
18

Мне нужно обновить все строки в базе данных так, чтобы определенное поле в все из них было равно одному значению. Вот пример.Как установить каждую строку в одно и то же значение с помощью Laravel's Eloquent/Fluent?

Допустим, моя таблица базы данных следующим образом:

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

Я хочу, чтобы выполнить запрос, который устанавливает подтвержденное поле каждой строки на 1.

я мог бы сделать это следующим образом:

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

Но похоже, что был бы лучший способ? Единственный запрос, который просто сказал бы: «установить поле подтвержденной каждой строки в 1.»

Есть ли такой запрос в «Ярком/Свободном Ларавеле»?

ответ

37

Ну, простой ответ: нет, вы не можете с красноречивым. Модель представляет 1 строку в базе данных, это было бы бессмысленно, если бы они реализовали это.

Однако, есть способ сделать это с помощью FLUENT:

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

или даже лучше

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

Вы можете сделать это с elquent (Laravel 4):

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

Чтобы сохранить текущую актуальность, вы можете обновить все строки по модели Eloquent напрямую, используя:

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

Это то, что я ищу! Благодаря! –