laravel eloquent - 需要帮助将限制白名单转换为黑名单
laravel eloquent - need help coverting a restrictions white list into a black list
我目前有资源 table :
- 资源 table 包含以下列:id - title- description - path
和一个resource_user_role_restrictionstable
- resource_user_role_restrictionstable 包含以下列:id - resource_id - role_id - viewable
我的模型包含以下函数,用于检查 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 );
});
我目前有资源 table :
- 资源 table 包含以下列:id - title- description - path
和一个resource_user_role_restrictionstable
- resource_user_role_restrictionstable 包含以下列:id - resource_id - role_id - viewable
我的模型包含以下函数,用于检查 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 );
});