I have three Models User
, Role
and Permission
. There is complicated but well-known relation between these Models and their tables.
Tables and their columns :
users | roles | permissions | permission_role |
---|---|---|---|
id | id | id | id |
... | ... | ... | role_id |
role_id | ... | ... | permission_id |
So each User has only one role and every role has many permissions.
<?php
class User
{
public function role()
{
return $this->belongsTo(Role::class);
}
public function permissions()
{
return $this->hasManyThrough(Permission::class,Role::class);
}
}
class Role
{
public function users()
{
return $this->hasMany(User::class);
}
public function permissions()
{
return $this->belongsToMany(Permission::class);
}
}
class Permission
{
public function roles()
{
return $this->belongsToMany(Role::class);
}
public function users()
{
return $this->hasManyThrough(User::class,Role::class);
}
}
I can access
- $user->role,
- $user->role->permissions,
- $role->users,
- $role->permissions
- $permission->roles
except for
- $permission->users
which returns sql error :
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'roles.permission_id' in 'field list' (SQL: select `users`.*, `roles`.`permission_id` as `laravel_through_key` from `users` inner join `roles` on `roles`.`id` = `users`.`role_id` where `roles`.`permission_id` = 1)
But why?