Где пункт не фильтруется - PullRequest
0 голосов
/ 21 ноября 2018

В моей модели у меня есть следующие две функции:

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);
    });
}

Все это работает нормально,просто пункты меню не фильтруются, есть идеи?

Ответы [ 3 ]

0 голосов
/ 21 ноября 2018

попробуйте это:

\App\model_name::where('active_',TRUE)->where('security_level_id', $securityLevel);
0 голосов
/ 21 ноября 2018

После еще одного исследования я обнаружил, что проблема заключается в моем блейд-коде.

Я все еще ссылаюсь $item['children'] вместо $item['activechildren']

<li>{{ $item['menu_text'] }}</li>
@if (count($item['activechildren']) > 0)
    <ul>
    @foreach($item['activechildren'] as $item)
        @include('desktop.menu.children', $item)
    @endforeach
    </ul>
@endif

Почему $item['children'] все еще работает?Почему это не выдает ошибку?

0 голосов
/ 21 ноября 2018

Похоже, вам нужно обновить ActiveChildren() отношение:

public function ActiveChildren()
{
    $securityLevel = Auth()->User()->security_level_id;

    /* $activeChildren = Menu::Children()
     *     ->where('active_', TRUE)
     *     ->where('security_level_id', $securityLevel);
     *
     * return $activeChildren;
     */
    return $this->Children() // switch Menu::Children() to $this->Children()
        ->where('active_', TRUE)
        ->where('security_level_id', $securityLevel);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...