CActiveDataProvider で多対多の関係を実装する方法がわかりません。
最初の状況では、次の関係を持つ 1 つのモデル「会社」があります。
return array(
'owner' => array(self::HAS_ONE, 'User', 'user_id'),
'admins' => array(self::MANY_MANY, 'User', '{{company_user}}(company_id,user_id)', 'condition' => 'is_admin = 1'),
'members' => array(self::MANY_MANY, 'User', '{{company_user}}(company_id,user_id)'),
'standard_members' => array(self::MANY_MANY, 'User', '{{company_user}}(company_id,user_id)', 'condition' => 'is_admin = 0'),
);
今、私は会社のすべての管理者を取得したいと考えています。通常、私はしました:
$company = Company::model()->find('company_id=1');
var_dump($company->with('admins')->findAll());
だから私は会社のすべての管理者を持っています。
しかし、私は解析しませんでした.CActiveDataProviderでそれを行う方法.
$dataProvider_admins = new CActiveDataProvider('Company', array(
'criteria' => array(
'with' => array(
'admins' => array('condition' => 'company_id='.$company->id)
),
),
'pagination' => array(
'pageSize' => 20,
),
));
var_dump($dataProvider_admins->getData());
しかし、この方法では、すべての管理者を含む会社のレコードを取得できますが、すべての管理者を含む配列は取得できません。
更新: リレーション テーブルのモデルを作成して{{company_user}}
これを使用することもできますが、正しい方法ではないと思います。