Обновить модель с несколькими строками - PullRequest
0 голосов
/ 10 марта 2020

У меня есть объектная модель, которая имеет несколько строк, например, результат, полученный с помощью этого запроса:

$cities = City::whereIn('id' , [1,2,3])->get();

Что я хочу сделать, это обновить каждую строку с тем же значением без использования each, потому что each выполняет запрос к каждой строке, поэтому в приведенном выше запросе у меня будет 3 запроса.

Вместо этого:

$cities->each->update(['name' => 'test']);

Я хочу сделать что-то подобное, так как у меня уже есть объект модели, но он не работает:

$cities->update(['name' => 'test']);

Вместо этого я должен сделать что-то подобное, чтобы заставить его работать:

City::whereIn('id' , $cities->pluck('id'))->update(['Avatar' => 'test']);

Мой вопрос таков; Почему я не могу использовать это:

$cities->update(['name' => 'test']);

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

При использовании метода ->get() вы получаете не модель, а набор моделей.

Не существует такой вещи, как многорядные модели. Модели имеют только один «ряд».

0 голосов
/ 22 марта 2020

Для этого есть пример в документации :

App\Flight::where('active', 1)
          ->where('destination', 'San Diego')
          ->update(['delayed' => 1]);

См. Раздел массовое обновление .

Итак, в вашем в случае, если запрос должен быть:

City::whereIn('id' , [1,2,3])
    ->update(['name' => 'test']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...