laravel eloquent - 需要帮助将限制白名单转换为黑名单

laravel eloquent - need help coverting a restrictions white list into a black list

我目前有资源 table :

和一个resource_user_role_restrictionstable

我的模型包含以下函数,用于检查 resource_user_role_restrictions table 和 return 的所有资源,其 resource_user_role_restrictions.role_id 与传入的 $userRoleId 匹配,以及它是否为可查看列设置为 1:

public function scopeResourcesFilter($query, array $filters) {
     $userRoleId = $filters[0];

     $query->whereHas('resourceUserRoleRestrictions', function  ($query) use($userRoleId){
         $query->where('viewable', 1)->where("role_id", $userRoleId );
     });
    }

在我的控制器中调用了这个函数:

$userRoleId = Auth::user()->role_id;

$resources = Resource::resourcesFilter([$userRoleId])->with('country', 'resourceUserRoleRestrictions')->get();

但是,现在需要将其转换为黑名单,从而删除可查看的列,并且假设 table 上的任何资源都被限制且不可查看,因此不会 returned .我不知道如何让它醒来。理想情况下,此函数现在应该 return 来自资源 table 的所有项目,除了那些 resource_user_role_restrictions.user_role 与传入的 $userRoleId.

匹配的项目

如有任何帮助,我们将不胜感激。

看起来 whereDoesntHave() 是我需要的。

$query->whereDoesntHave('resourceUserRoleRestrictions', function  ($query) use($userRoleId){
            $query->where("role_id", $userRoleId );
        });