Мне нужно применить область видимости для сводного класса в отношении 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();
Есть ли способ применить область действия сводного класса к этому отношению?
Заранее спасибо