4

私はテーブルを持っています:

ユーザー {ID、名前}
プロジェクト {id, name}
ロール {id, name}
projects_users {id, user_id, project_id, role_id}

私はモデルを持っています:

プロジェクト{projects_usersを介して多くのユーザーがいます}
ユーザー{projects_usersを通じて多くのプロジェクトがあります}

質問: 1 つのプロジェクトのユーザー ロールを取得するにはどうすればよいですか? それとも、テーブルを再構築する必要がありますか?

コード:

$project = ORM::factory('project', $id);
$users = $project->users->find_all();
foreach ($users as $u) {
    $roles = $u-> .... このユーザーとこのプロジェクトのすべてのロールを取得するには?
}
4

1 に答える 1

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();
于 2010-08-06T12:14:01.187 に答える