Laravel - 检查记录的存在

时间:2016-03-13 12:43:07

标签: php laravel laravel-5

目前我的数据库表定义如下:

site_roles - 包含不同的角色

site_user_roles - 将用户链接到多个角色

site_permission_modules - 包含不同的访问级别[例如。查看管理员控件,禁止用户]

site_role_permissions - 将权限模块链接到角色

我在laravel中的模型被正确定义,以查询这些多对多的关系。在代码中,我想检查用户是否有与他链接的特定权限模块。

为了更好地理解,以下是我的模型:

用户

public function SiteRoles()
    {
        return $this->belongsToMany('App\SiteRole', 'site_user_roles', 'users_id', 'site_roles_id');
    }

SiteRole

public function Users()
    {
        return $this->belongsToMany('App\User', 'site_user_roles', 'site_roles_id', 'user_id');
    }

    public function SitePermissionModules()
    {
        return $this->belongsToMany('App\SitePermissionModule', 'site_role_permissions', 'site_roles_id', 'site_permission_modules_id');
    }

SitePermissionModule

public function SiteRoles()
    {
        return $this->belongsToMany('App\SiteRole', 'site_role_permissions', 'site_permission_modules_id', 'site_roles_id');
    }

以下是我目前所做的事情:

Auth::User()->SiteRoles()->with('SitePermissionModules')->get()

with()关键字检索与每个角色关联的嵌套权限数组。

我需要检查用户是否有与他链接的特定权限模块。

最好的laravel方法是什么?

编辑:

基本上我只想问什么是将多对多关系链接起来的最佳方式。

1 个答案:

答案 0 :(得分:0)

Auth::User()->SiteRoles()->with(['SitePermissionModules' => function ($query) {
                                   $query->where('site_role_permissions','=','admin'); 
                                      //use where as per your requirment.

}])->get();

Querying Relaionship