【问题标题】:Double Join Select双连接选择
【发布时间】:2013-04-25 09:35:13
【问题描述】:

三个表ProjectUsersIssues

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

关系:

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

我想做什么:

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

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

我想模仿什么sql代码:

从 Issue.i_id 上的问题加入项目中选择 Issue.i_name = 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;

【问题讨论】:

  • 如果没有人给我打招呼,我会发布一个解决方法。

标签: yii


【解决方案1】:

要解决这个问题,您必须在您的 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/>";
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 2022-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多