简体   繁体   English

Yii活动记录:如何在相关的多对多模型中按条件限制记录。

[英]Yii Active record: How to limit records by condition in related many_many model.

I have got a three models 我有三个模型

Company (id, name) 公司 (编号,名称)

public function relations()
{
    return array(
        'specializations' => array(self::MANY_MANY, 'Specialization', 'company_specialization(company_id, spec_id)'),
    );
}

Specialization (id, alias, name) 专业化 (ID,别名,名称)

public function relations()
{
    return array(
        'companies' => array(self::MANY_MANY, 'Company', 'company_specialization(spec_id, company_id)'),
    );
}

CompanySpecialization (company_id, spec_id) CompanySpecialization (company_id,spec_id)

I want to find all the Companies that have a certain set of Specializations by specialization alias attributes. 我想通过专门化别名属性找到所有具有某些专门化集合的公司。

I tried this, but it returns all records without limitations (yii-debug sql query here ). 我试过了,但是它返回了所有记录而没有限制(yii-debug sql query here )。

    $criteria=new CDbCriteria;
    $criteria->with=array(
        'specializations' => array(
            'select'=>false,
            'joinType'=>'INNER JOIN',
            'condition'=>'specializations.alias IN ("spec1","spec2","spec3")',
        )
    );
    $model=Company::model()->findAll($criteria);

In generally i want to get next sql query in active record way: 通常,我想以活动记录方式获取下一个sql查询:

SELECT c.name AS name
        FROM company c
          INNER JOIN company_specialization cs ON (c.id=cs.company_id)
          INNER JOIN specialization s ON (s.id=cs.spec_id)
        WHERE (s.alias IN ("spec1","spec2","spec3))

Almost there. 快好了。 You should specify the criteria using CDbCriteria::addInCondition() 您应该使用CDbCriteria::addInCondition()指定条件。

$criteria=new CDbCriteria;
$criteria->with=array(
    'specializations' => array(
        'select'=>false,
        'joinType'=>'INNER JOIN',
    )
);
$criteria->addInCondition('specializations.alias', array("spec1","spec2","spec3"));;
$model=Company::model()->findAll($criteria);

解决方案只是添加

$criteria->together=true;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM