在多对多场景中将本地范围放在哪里

时间:2019-06-26 15:29:49

标签: php laravel eloquent scope

我希望能对以下问题有所了解。首先概述游戏中的桌子。

**users**
user_id - integer
name - string
user_role_id - integer(default role for the user system wide)

**user_roles**
user_role_id - integer
name - string

**user_groups**
user_group_id - integer
name - string

**user_group_users**
user_id - integer
user_group_id - integer
user_role_id - integer(role is specific to user_group and overrides the default permissions for the user in the user group)

我为 user_group_users 创建了一个自定义的中间模型,以保持环境整洁并帮助进行数据访问。但是我在哪里以及如何实现一个简单的作用域方面挣扎。目前,我可以使用Auth::user()->userGroups来获取特定用户的所有组,但是我希望能够对其进行过滤,以仅检索该用户为管理员的列表,即其中他们的user_role_id代表< strong> user_group_users 表。我希望能够这样做:Auth::user()->userGroups->isAdmin()

在此设置中我将示波器放在哪里?我尝试将其放置在 UserGroupUser 模型中,但无效。

    public function scopeIsAdmin($query){
         return $query->where('user_role_id', 2);
    }

Auth :: user()-> userGroups()-> isAdmin()结果为Call to undefined method Illuminate\Database\Eloquent\Relations\BelongsToMany::isAdmin()

适用关系

**User.php**
    public function userGroups()
    {
        return $this->belongsToMany('App\Models\UserGroup', 'user_group_users', 'user_id', 'user_group_id')
                    ->using('App\Models\UserGroupUser');
    }

**UserRole**

    public function users()
    {
        return $this->hasMany('App\Models\User', 'user_role_id', 'user_role_id');
    }

**UserGroup**

    public function users()
    {
        return $this->belongsToMany('App\Models\User', 'user_group_users', 'user_group_id', 'user_id')
                    ->using('App\Models\UserGroupUser');
    }


**UserGroupUser.php**

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Relations\Pivot;

class UserGroupUser extends Pivot
{
    protected $table = 'user_group_users';
    public $timestamps = false;

    public function user()
    {
        return $this->belongsTo('App\Models\User', 'user_id', 'user_id');
    }

    public function role()
    {
        return $this->belongsTo('App\Models\UserRole', 'user_role_id', 'user_role_id');
    }

}

0 个答案:

没有答案