2016-03-25 22 views
0

会社のモデルでは、モデルuserとbusiness_unitに参加します。YIIでCDbCriteriaの結合属性を取得する方法は?

$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"; 

これは機能します。

1)まず最初にすることです。しかし、私は

答えて

1

あなたのようなユーザーやbusiness_unit、のための「会社」のモデルで関係を作成する必要があります属性companyと一緒に、私はbusiness_unitusers属性を取得attributes.How唯一の企業を取得します

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

2)次に、あなたが基準を作成することができます:あなたは会社のモデルで2体の関係を持っている場合、ユーザーとbusiness_unitのために、チェック

$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); 

ユーザーやビジネスユニット:

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

ありがとう:

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

4)がアクティブデータプロバイダを持っていますそれは機能します...入れ子になった結合属性を取得する方法もう一つだけ –

+0

foreachは各関係を循環させます(関係はhas_manyなので) –

関連する問題