Laravel 5.6 применяет основную область в отношениях - PullRequest
3 голосов
/ 21 марта 2019

Мне нужно применить область видимости для сводного класса в отношении morphedByMany, включенном в класс User.Это отношение:

public function nodes($nodeClass)
{
    return
        $this->morphedByMany(
            $nodeClass,
            'node',
            'users_permissions',
            'user_id',
            'node_id',
            'id',
            'id'
        )
        ->using('App\Models\UserNode');
}

Затем у меня есть область роли в классе сводки (UserNode).Эта область - не наш код, а из черт HasRoles из пакета spatie / laravel-Разрешения:

public function scopeRole(Builder $query, $roles, $guard = null): Builder
{
    if ($roles instanceof Collection) {
        $roles = $roles->all();
    }

    if (! is_array($roles)) {
        $roles = [$roles];
    }

    $roles = array_map(function ($role) use ($guard) {
        if ($role instanceof Role) {
            return $role;
        }

        $method = is_numeric($role) ? 'findById' : 'findByName';
        $guard = $guard ?: $this->getDefaultGuardName();

        return $this->getRoleClass()->{$method}($role, $guard);
    }, $roles);

    return $query->whereHas('roles', function ($query) use ($roles) {
        $query->where(function ($query) use ($roles) {
            foreach ($roles as $role) {
                $query->orWhere(config('permission.table_names.roles').'.id', $role->id);
            }
        });
    });
}

Когда я пытаюсь получить определенный класс узлов внутри класса User, он работает отлично:

$nodes = $this->nodes($nodeClass)->get();

Однако я не знаю, как правильно применить область видимости «роль» к базовому классу отношения, поскольку wherePivot или wherePivotIn не принимают области, отношения или замыкания.Я также пробовал другие вещи с таким же результатом, как:

$nodes = $this->nodes($nodeClass)->whereHas('pivot', function($q) use ($roles) {
        $q->role($roles);
    })->get();

Есть ли способ применить область действия сводного класса к этому отношению?

Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...