Непростая задача, которую я не могу решить. Никак не пойму, как устроено все это.
Есть 3 таблицы: Users, Filials, Specs
Юзеры, филиалы и специальности.
Каждый юзер закреплен за филиалом, и у каждого юзера есть специальность.
Таблица Users
`id`
`name` - имена юзеров
`filial_id`
`spec_id`
Из этого выходит, что я могу в конкретном филиале выбрать всех юзеров. В конкретной профессии всех юзеров . И также наоборот.
Но у всех профессий (таблица Specs) есть уровень доступа.
Таблица Specs
`id`
`name` - название профессии
`lvl` - уровень доступа профессии
Так вот у меня идет цикл перечисления всех филиалов: выводится имя филиала и юзеры с уровнем 2.
Сейчас в моделе Filials я просто обращаюсь ко всем юзерам
public function users() {
return $this->hasMany('App\User');
}
Но мне нужны только уровня специальности 2. Назначать каждому юзеру свой уровень не годится, должен именно быть у профессии уровень. Как решить мне данную проблему без цикла в цикле? Я читал, что полиморфно как-то можно, но как я не пойму.
Во-первых, модели рекомендовано именовать в единственном числе: Filial
, User
, Spec
.
Далее, в модели User
надо сделать следующее:
public function spec()
{
return $this->belongsTo(Spec::class);
}
В модели Filial
:
public function users()
{
return $this->hasMany(User::class)->whereHas('spec', function($q){
// Указываем с каким уровнем доступа выбирать
$q->where('lvl', 2);
});
}
UPD. Ссылки на соглашение об именовании: официальная документация, гитхаб
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть код для получения максимального числа из колонки num в БД
На сайте есть элемент в котором публикуется акция недели (только одна!),у данной статьи должен быть выставлен срок публикации по выбору , а так...
Почти никогда не сталкивался с php, а тут появилась задача вывести вторую цену товара поделённую на 12CMS Bitrix
После переноса сайта на новый сервер битрикс ругается: