双加入选择

时间:2013-04-25 09:35:13

标签: yii

三个表项目用户问题

  • 项目表列:p_id,name,...
  • 用户表列:u_id username ...
  • 发布表列:i_id i_name ...

关系:

  • 项目有很多用户 - 1 .. *
  • 项目有很多用户 - 1 .. *
  • 项目有很多问题 - 1 .. *
  • 用户有很多问题 - 1 .. *

我想做什么:

在Yii框架逻辑中:选择项目及其所有用户,这些用户必须只有所选项目的问题。

在表格逻辑中:选择某个项目 AND 用户的问题。

我想模仿的是什么sql代码:

  

在Issue.i_id =上选择Issue.i_name FROM Issue Join Project   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;

1 个答案:

答案 0 :(得分: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/>";
            }