2013-04-25 57 views
3

三表項目用戶問題雙人加入選擇

  • 項目表列:p_id的,姓名,...
  • 用戶表列:U_ID用戶名...
  • 問題表列:i_id i_name ...

關係:

  • 項目有許多用戶 - 1 .. *
  • 項目有許多用戶 - 1 .. *
  • 項目有很多問題 - 1 .. *
  • 用戶有很多問題 - 1 .. *

我想要做什麼:

在Yii框架的邏輯:選擇項目與所有它的用戶,這些用戶必須只有選定項目的問題。

在表邏輯:選擇某個項目用戶的問題。

我想模仿什麼SQL代碼:

SELECT Issue.i_name自發行上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; 
+0

如果沒有人有一個salution我會發佈一個解決方法。 – user2003066 2013-04-26 10:14:24

回答

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/>"; 
      }