В моей модели у меня есть следующие две функции:
public function Children()
{
return $this->hasMany(Menu::class, 'parent_menu_id', 'id');
}
public function ActiveChildren()
{
$securityLevel = Auth()->User()->security_level_id;
$activeChildren = Menu::Children()
->where('active_', TRUE)
->where('security_level_id', $securityLevel);
return $activeChildren;
}
Children()
возвращает список всех элементов меню, где их parent_menu_id соответствует идентификатору этой записи.Это используется в Nova для целей настройки.
С помощью ActiveChildren()
Я пытаюсь создать отфильтрованный список элементов для фактического меню, где active_
= ИСТИНА и security_level_id
= идентификатор уровня безопасности текущегопользователь.
Но вместо этого ActiveChildren()
возвращает все элементы меню вместо отфильтрованного набора.ActiveChildren заполняет массив следующей статической функцией:
public static function Tree()
{
return static::with(implode('.', array_fill(0, 4, 'ActiveChildren')))
->where('menu_type', '=', 'PRT')
->get();
}
, которая затем загружается через AppServiceProvider всякий раз, когда меню включается в блейд-файл:
public function boot()
{
view()->composer('desktop.menu.parent', function ($view) {
$items = Menu::Tree();
$view->withItems($items);
});
}
Все это работает нормально,просто пункты меню не фильтруются, есть идеи?