【发布时间】:2012-11-12 13:33:38
【问题描述】:
我不明白如何在 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') -
好建议,但结果是 一个 公司条目,而不是管理员条目数组。问题是我正在使用的小部件将显示一个公司条目而不是管理员列表。
标签: php yii yii-relations