nufrik
@nufrik

Как получить данные из связанной таблице по условию(Laravel)?

Изучаю Laravel, и вот столкнулся с такой проблемой, есть две таблицы(countries и cities), связаны hasMany, нужно достать все страны и города с населением больше 100к, и отсортировать по возрастанию.
Вот так находит всё, но только для страны с id = 1:
$countries = Country::find(1)
        ->cities()
        ->where('population', '>', 100000)
        ->orderBy('population', 'asc')
        ->get();

        dump($countries);


А так не хочет:
$countries = Country::all()
        ->cities()
        ->where('population', '>', 100000)
        ->orderBy('population', 'asc')
        ->get();

        dump($countries);

Ругается на метод cities() который я назвал в модели для связывания таблиц:
public function cities()
    {
        return $this->hasMany(City::class);
    }

Подскажите пожалуйста как правильно построить запрос, что я не так делаю?
Я так понимаю с одной записью работает, а с массивом не хочет. А при переборе циклом я постоянно теряю Города.
  • Вопрос задан
  • 320 просмотров
Решения вопроса 1
iMedved2009
@iMedved2009
Не люблю людей
Вы плохо прочитали доку, конкретно часть про querying relations
$countries = Country::whereHas('cities', function($builder){
    return $builder->where('population', '>', 100000);
})
->with(['cities' => function($builder){
    return $builder->where('population', '>', 100000)->orderBy('population', 'asc');
}])
->get();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы