拉拉威尔需要帮助将限制性的白名单变成黑名单



我目前有一个资源表:

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

和resource_user_role_restrictions表

  • resource_user_role_restrictionstable具有以下列:id-resource_id-role_id-visible

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

然而,现在需要将其转换为黑名单,从而删除可查看的列,并假定表上的任何资源都受到限制且不可查看,因此不返回。我不知道怎样才能让它惊艳。理想情况下,该函数现在应该返回resources表中的所有项,但resource_user_role_restrictions.user_role与传入的$userRoleId匹配的项除外。

任何帮助都将不胜感激。

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

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

最新更新