2014-09-07 2 views
0

Любой может меня рассказать, я новичок в Yii. У меня есть 3 таблицыYii CActiveDataProvider Relations

projects  (id,name,status,created_by) 
users   (id,name) 
project_users (id,project_id,user_id) 

Условие: Показать все проекты, если они созданы текущим пользователем или текущим пользователем, является членом проекта. У меня уже есть рабочий код для этого.

$criteria=new CDbCriteria; 
    $criteria->join = ' LEFT JOIN project_users pu ON pu.project_id=t.id'; 
    $criteria->addCondition('created_by='.Yii::app()->user->id.' OR pu.user_id='.Yii::app()->user->id); 
    $criteria->distinct = true; 

    $dataProvider=new CActiveDataProvider('Project', 
    array(
      'pagination'=>array('pageSize'=>15), 
      'criteria'=> $criteria 
     ) 
    ); 

Но, как хотелось бы узнать, как я могу получить тот же результат, используя «WITH» (реляционный AR-запрос в Yii). Я уже пробовал, но все провалилось. Пожалуйста, помогите спасибо.

ответ

2

отношение на Project файле модели

projectUsers' => array(self::HAS_MANY, 'ProjectUsers', array('id'=>'project_id')), 

$dataprovider должен быть

$dataProvider=new CActiveDataProvider('Project', 
     array(
       'pagination'=>array('pageSize'=>15), 
       'criteria'=>array(
        'with'=>array(
         'projectUsers' => array('alias' => 'pu') 
        ), 
        'condition' => 't.created_by='.Yii::app()->user->id.' OR pu.user_id='.Yii::app()->user->id, 
        'distinct'=>true, 
        'together'=>true, 
       ), 
      ) 
     ); 

Проверьте мою фотографию. Критерии является более мощным, чем это, но вы можете понять в основном, как использовать

enter image description here

Небольшой совет: Если все новое с вами, просто enable Yii log, чтобы увидеть, что запрос производится в конце концов, вы можете устраните проблему самостоятельно.

+0

спасибо! Я люблю u –

+0

, это должен быть недостающий параметр «вместе» в моем коде. –