Я не понимаю, как реализовать отношение «многие ко многим» в CActiveDataProvider.
Во-первых, у меня есть одна модель «Компания» со следующими отношениями:
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}}
и использовать ее, но я не думаю, что это правильный путь, не так ли?
array('condition' => 'company_id='.$company->id)
перед'with'
и оставить только'with' => array('admins')
- person GBD   schedule 12.11.2012