Вопрос Laravel по отношениям
Есть 3 модели Region, Branch, User и одна сводная таблица user_branches в ней поля user_id и branch_id
У региона есть филиалы там отношения
public function branches(){
return $this->hasMany(Branch::class);
}
У филиала есть отношение
public function users()
{
return $this->belongsToMany('App\User', 'user_branches');
}
Как мне вернуть все регионы которые есть в базе с филиалами, но только те филиалы которые доступны залогиненному юзеру
Получаю так все регионы и филиалы в них Region::with('branches')->get();, вот тут получается нужно отсортировать только те филиалы которые доступны юзеру
Ответы (1 шт):
Вы можете использовать query builder внутри with. В данном случае нужна комбинация with() + whereHas().
Получить все регионы с отфильтрованными филиалами:
$regions = Region
::with([
'branches' => function ($query) {
$query->whereHas('users', function ($query) {
$query->where('id', auth()->id());
});
}
])
->get();
Получить только те регионы, в которых есть отфильтрованные филиалы, с отфильтрованными филиалами:
$regions = Region
::with([
'branches' => function ($query) {
$query->whereHas('users', function ($query) {
$query->where('id', auth()->id());
});
}
])
->whereHas('branches', function ($query) {
$query->whereHas('users', function ($query) {
$query->where('id', auth()->id());
});
})
->get();
Если база данных пожалуется на колонку id, тогда надо заменить id на users.id:
$query->where('users.id', auth()->id());