Я прикрепляю пользовательские права доступа к нескольким различным моделям, используя полиморф c отношение «многие ко многим» - сводная таблица называется permissables
:
Permissables
- id
- user_id
- permissable_type
- permissable_id
- role
- created_at
- updated_at
Это работает хорошо - я может вернуть список разрешенных пользователей для моей модели Project
, используя:
public function users()
{
return $this->morphToMany(User::class, 'permissable')->withPivot('role')->withTimestamps();
}
Если я хочу отфильтровать это только для владельцев - ie, где поле сводки role
равно owner
- Я могу сделать следующее в Tinker:
Project::first()->users->where('pivot.role', '=', 'owner')
Но если я попробую это в моей модели:
public function owners()
{
return $this->users()->where('pivot.role', '=', 'owner');
}
, когда я вызываю Project->owners
в Tinker, я получаю ошибку:
>>> Project::first()->owners
[!] Aliasing 'Project' to 'App\Project' for this Tinker session.
Illuminate/Database/QueryException with message 'SQLSTATE[HY000]: General error: 1 no such column: pivot.role (SQL: select "users".*, "permissables"."permissable_id" as "pivot_permissable_id", "permissables"."user_id" as "pivot_user_id", "permissables"."permissable_type" as "pivot_permissable_type", "permissables"."role" as "pivot_role", "permissables"."created_at" as "pivot_created_at", "permissables"."updated_at" as "pivot_updated_at" from "users" inner join "permissables" on "users"."id" = "permissables"."user_id" where "permissables"."permissable_id" = 1 and "permissables"."permissable_type" = App/Project and "pivot"."role" = owner)'