【问题标题】:laravel 雄辩 - 需要帮助将限制白名单转换为黑名单
【发布时间】:2022-01-22 02:34:12
【问题描述】:

我目前有一个资源表:

  • 资源表有以下列:id - title- description - path

还有一个 resource_user_role_restrictions 表

  • resource_user_role_restrictionstable 包含以下列:id - resource_id - role_id - viewable

我的模型包含以下函数,该函数检查 resource_user_role_restrictions 表并返回其 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();

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

任何帮助都将不胜感激。

【问题讨论】:

    标签: laravel eloquent laravel-7


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-13
      • 2016-02-17
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      相关资源
      最近更新 更多