Как установить каждую строку с тем же значением с Laravel 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 ".
Есть ли такой запрос в Laravel Rloquent/Fluent?
Ответы
Ответ 1
Ну, простой ответ: нет, вы не можете с красноречивым. Модель представляет 1 строку в базе данных, это было бы бессмысленно, если бы они реализовали это.
Однако есть способ сделать это с бегло:
$affected = DB::table('table')->update(array('confirmed' => 1));
или даже лучше
$affected = DB::table('table')->where('confirmed', '=', 0)->update(array('confirmed' => 1));
Ответ 2
Чтобы поддерживать текущий поток, вы можете обновлять все строки по модели Eloquent напрямую, используя:
Model::query()->update(['confirmed' => 1]);
Ответ 3
Вы можете сделать это с помощью elquent (laravel 4):
MyModel::where('confirmed', '=', 0)->update(['confirmed' => 1])