3

ProjectUsersIssuesの3 つのテーブル。

  • プロジェクト テーブルの列: p_id,name,...
  • ユーザー テーブルの列: u_id ユーザー名...
  • 問題テーブルの列: i_id i_name...

関係:

  • プロジェクトには多数のユーザーがいます - 1..*
  • プロジェクトには多数のユーザーがいます - 1..*
  • プロジェクトには多くの問題があります - 1..*
  • ユーザーには多くの問題があります - 1..*

私がしたいこと:

Yii フレームワークのロジック: すべてのユーザーがいるプロジェクトを選択します。これらのユーザーは、選択したプロジェクトの課題のみを持っている必要があります。

テーブル ロジック: 特定のプロジェクトおよびユーザーの課題を選択します。

模倣したいSQLコード:

SELECT Issue.i_name FROM Issue Issue.i_id = Project.p_id でプロジェクトに参加 Issue.i_id でユーザーに参加 User.u_id

Yiiでやりたいこと:

//get Project
$model = Project::model()->findByPk( $p_id );
//get Project's users
$users = $model->users;
//get each of users issues of selected project
foreach( $users as $user ) 
    $issues = $user->issues;
4

1 に答える 1

2

これを解決するには、ralations メソッドでthroughを使用する必要があります。

プロジェクト モデルのリレーション メソッドは次のようになります。

public function relations()
    {
            return array(
                'users' => array(self::MANY_MANY, 'User', 'tbl_project_user_assignment(project_id, user_id)'),
                //'issues' => array(self::HAS_MANY, 'Issue', 'project_id'),
                'issues' => array(self::HAS_MANY,'Issue',array('id'=>'owner_id'),'through'=>'users'),

                'columns' => array(self::MANY_MANY, 'Column', 'tbl_project_rel_column(p_id,c_id)'),
            );
    }

プロジェクトを選択するアクションでは、選択したプロジェクトのユーザーとユーザーの投稿 (または私の場合は課題) です。

 $project = Project::model()->with('users','issues')->findByPk(1);


            $users = $project->users;

            foreach($users as $user) {
                echo $user->username."<br/>";
            }

            $issues = $project->issues;

            foreach($issues as $issue) {
                echo $issue->name."<br/>";
            }
于 2013-04-28T09:03:29.753 に答える