Если я правильно понимаю, что вы хотите выбрать все регионы из данной страны, в которых есть города с активными предложениями работы, вы можете сделать что-то вроде этого:
$regions = Region::where('country_id', $id)->whereHas('cities', function($query) {
$query->whereHas('jobs', function ($quesry) {
$quesry->where('active', 1);
});
});
Если вы захотите загрузить все данные отношений в том же запросе, который вы могли бы связать методом with()
с вашим запросом:
$regions = Region::with('cities.jobs')->where('country_id', $id)->whereHas('cities', function($query) {
$query->whereHas('jobs', function ($quesry) {
$quesry->where('active', 1);
});
});
Примечание. Нет необходимости добавлять оператор возврата к вашим запросам whereHas()
.
@ Edit
После вашего редактирования, где вы показываете код своего контроллера, я теперь понимаю, что происходит.
Вы получаете все регионы, в которых есть города с активными предложениями о работе, но когда вы запускаете свой для каждого l oop eloquent автоматически загружает все города для этого региона (если в них нет активных предложений о работе), поэтому вы получаете этот результат, поэтому мы должны получить все регионы, в которых есть города с активными предложениями о работе, и загружайте только эти города в свой регион. Нечто подобное должно работать:
$regions = Region::with(['cities' => function($query) {
$query->with(['jobs' => function ($quesry) {
$quesry->where('active', 1);
}])->whereHas('jobs', function ($quesry) {
$quesry->where('active', 1)
});
}])->where('country_id', $id)->whereHas('cities', function($query) {
$query->whereHas('jobs', function ($quesry) {
$quesry->where('active', 1);
})->get();
});
Не проверял, но это должно работать. Это будет загружать только города, в которых есть активные рабочие места, и активные рабочие места в каждом регионе, в котором есть города с активными предложениями о работе.
Надеюсь, что имеет смысл ?.