3

三张表项目用户问题

  • 项目表列:p_id,name,...
  • 用户表列:u_id 用户名...
  • 问题表列:i_id i_name...

关系:

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

我想做的事:

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

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

我想模仿什么sql代码:

SELECT Issue.i_name FROM 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 回答