2016-03-25 4 views
0

В модели компании я присоединяюсь к моделям пользователей и business_unit.Как получить атрибуты соединения в CDbCriteria в YII?

$criteria=new CDbCriteria; 
$criteria->compare('id',$this->id); 
$criteria->compare('status',$this->status); 

$criteria->condition = "`t`.status = '1'"; 
$criteria->order = 'created DESC'; 
$criteria->join = " inner join users on users.company_id = `t`.id"; 

$criteria->condition = "`t`.status = '1'"; 
$criteria->order = 'created DESC'; 
$criteria->join = " inner join business_unit on business_unit.company_id = `t`.id"; 

Это работает. Но я получаю только компании attributes.How я получаю business_unit и users атрибуты вместе с company атрибуты

ответ

1

Вы должны создать отношения в модели «компании» для пользователей и business_unit, таких как:

1) Первое, что является проверить, если у вас есть два соотношения в модели компании, для пользователей и business_unit:

public function relations() 
{ 
    return array(
     'users' => array(self::HAS_MANY, 'User', 'company_id'), 
     'businessUnits' => array(self::HAS_MANY, 'BusinessUnit', 'company_id'), 
    ); 
} 

2) Затем вы можете создать критерии с:

$criteria=new CDbCriteria; 
$criteria->compare('id',$this->id); 
$criteria->compare('status',$this->status); 
$criteria->with = array('users', 'businessUnits'); 
$criteria->together = true; 

3) Для того, чтобы иметь все модели:

$models = Company::model()->findAll($criteria); 

Тогда для каждой модели есть пользователи и бизнес-единицы:

foreach($models as $m) 
{ 
    // Users 
    $users = $m->users; 
    $bu = $m->businessUnit; 
} 

4) Для того, чтобы иметь активный поставщик данных:

$dataProvider = new CActiveDataProvider('Company', array('criteria' => $criteria); 
+0

Спасибо это работает ... Еще одна вещь, как я получаю вложенные атрибуты соединения –

+0

В foreach, циклически использующем каждое отношение (поскольку отношения has_many) –