[英]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.