gpt4 book ai didi

php - Yii CActiveDataProvider 多对多

转载 作者:搜寻专家 更新时间:2023-10-31 20:45:56 24 4
gpt4 key购买 nike

我不明白如何在 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}} 创建一个模型并使用它,但我认为它不是正确的方法,不是吗?

最佳答案

您可以尝试以下操作:

$dataProvider_admins = new CActiveDataProvider('Company', array(
'criteria' => array(
'with' => array('admins'),
'condition' => 'company_id=:id',
'params' => array("id" => $company->id)
),
'pagination' => array(
'pageSize' => 20,
),
));

编辑:以上将创建返回公司模型列表的数据提供者。如果您想获取用户列表,则需要指定“用户”模型。 'with' 属性使用关系来构建连接条件。

您可以像在其他答案中一样使用连接条件,或者您可以在用户模型中定义关系,然后重用关系。

尝试如下操作,请检查公司关系是否在用户模型上定义。

$dataProvider_admins = new CActiveDataProvider('User', array(
'criteria' => array(
'with' => array('companies'),
'condition' => 'companies.company_id=:id and is_admin = 1',
'params' => array("id" => $company->id)
),
'pagination' => array(
'pageSize' => 20,
),
));

关于php - Yii CActiveDataProvider 多对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13344664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com