Kohana ORM отношения вопрос
У меня есть таблицы:
users {id, name} проекты {id, name} Роли {ID, имя} projects_users {id, user_id, project_id, role_id}
У меня есть модели:
проект {имеет много пользователей через projects_users} пользователь {имеет много проектов через projects_users}
Вопрос: Как я могу получить роли пользователя для одного проекта? Или, может быть, я должен восстановить свои таблицы?
Код:
$ project = ORM:: factory ('project', $ id); $ users = $ project-> users-> find_all (); foreach ($ users as $ u) { $ role = $u-> .... Как получить все роли для этого пользователя и для этого проекта? }
1 ответ
Решение
Ваша таблица project_users, кажется, представляет роли в проектах, добавьте еще одну модель, которая привязана к этой таблице:
project_role {
has one user
has one role
has one project
}
user {
has many project_role
...
}
project {
has many project_role
...
}
Тогда вы можете сделать:
$user = ORM::factory('user')
->with('project_role')
->where('project_role.project_id', '=', $id)
->with('project_role:role')->findall();
Если это не сработает, одно из следующего должно сработать, но может быть другой формой обхода того, что вам нужно.
$project = ORM::factory('project', $id);
$roles = $project->project_role->with('user')->with('role')->findall();
Или же
$roles = ORM::factory('project_role')
->where('project_id', '=', $id)
->with('user')->with('role')->findall();