簡體   English   中英

如何在laravel中為角色和權限建立hasManyThrough關系?

[英]How to establish a hasManyThrough relationship in laravel for roles and permissions?

因此,我了解了如何為用戶加載角色以及角色的權限。

但是現在我有了一個user表,一個role表和一個permission表。 我還具有用於鏈接用戶和角色的role_user表。 當然還有permission_role用於鏈接的權限和角色。

現在,當我想為用戶獲取所有角色時,我只需執行以下操作:

public function roles()
{
        return $this->belongsToMany('Uppdragshuset\AO\Tenant\Models\Role');
}

同樣,我可以獲取角色的權限,如下所示:

public function permissions()
{
        return $this->belongsToMany(Permission::class);
}

現在根據laravel上的文檔,我也可以使用hasManyThrough關系直接為用戶獲取權限,如下所示:

public function permissions()
{
    return $this->hasManyThrough(Permission::class, Role::class);
}

但這返回時顯示錯誤:

“字段列表”中的未知列“ role.user_id”

我想我明白原因。 Laravel在role表中尋找user_id字段,但它不了解這是多對多關系,因此應該在數據透視表中尋找它。

那么如何解決呢? 在Eloquent中有沒有解決的辦法,還是我不得不使用查詢生成器? 如果是,如何使用查詢生成器執行相同的操作?

HasManyThrough只能用於連接兩個HasMany關系。 您的案例沒有本機關系。

我創建了一個HasManyThrough具有無限層次和支持的關系BelongsToMany
GitHub上的存儲庫

安裝后,您可以像這樣使用它:

class User extends Model {
    use \Staudenmeir\EloquentHasManyDeep\HasRelationships;

    public function permissions() {
        return $this->hasManyDeep(Permission::class, ['role_user', Role::class, 'permission_role']);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM