2013-04-25 2 views
3

три таблицы проекта, Пользователи, Issues.Double Регистрация Выберите

  • стол Проект колонки: P_ID, имя, ...
  • Пользователи столбцов таблицы: u_id имя пользователя ...
  • Проблемы столбцов таблицы: i_id i_name ...

Отношения:

  • Проект имеет много пользователей - 1 .. *
  • Проект имеет много пользователей - 1 .. *
  • Проект имеет много вопросов - 1 .. *
  • пользователей есть много вопросов - 1 .. *

Что я хочу сделать:

В рамочной логике Yii: Выбор проект со всем его пользователей, у этих пользователей должны быть только проблемы выбранного проекта.

В таблицах логика: выберите Проблемы определенного проекта И пользователь.

Что SQL код, который я хочу, чтобы имитировать:

ВЫБОР Issue.i_name ОТ 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; 
+0

Если никто имеет решение, я отправлю обходной путь. – user2003066

ответ

2

чтобы решить эту проблему, вы должны использовать through в методе ralations.

метод модели отношений Проект должен выглядеть следующим образом:

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/>"; 
      } 
Смежные вопросы