Получение значений из связанных таблиц с условием
Есть две таблицы countries (имеет поле name) и cities (имеет поля name и population). Нужно получить все страны вместе с их городами, численность населения которых больше, например, 100.
В файле модели Country прописана связь:
public function cities()
{
return $this->hasMany(City::class);
}
В файле контроллера CountryController пытаюсь получить все записи с применением условия:
$countries = Country::all()
->cities()
->where('population', '>', 100);
В результате получаю ошибку:
Method Illuminate\Database\Eloquent\Collection::city does not exist.
p.s. Если получать по id каждую отдельную запись через find($id), то всё работает. Однако, всё, что возвращает несколько записей, будь то all() или find([$id]), то результатом возвращается данная ошибка.
Ответы (1 шт):
Автор решения: Anton Mironov
→ Ссылка
- Если надо получить города с населением больше 100.
$countries = Country::with(['cities' => function($city) {
$city->where('population', '>', 100);
}])
->get();
- Если надо получить страны, в которых есть города с населением больше 100.
$countries = Country::with('cities')
->whereHas('cities', function ($city) {
$city->where('population', '>', 100);
})
->get();