【问题标题】:Yii Active record: How to limit records by condition in related many_many model.Yii 活动记录:如何在相关的 many_many 模型中按条件限制记录。
【发布时间】:2023-03-06 07:17:01
【问题描述】:

我有三个模型

公司(id、名称)

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

专业化(id、别名、名称)

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

CompanySpecialization(company_id、spec_id)

我想通过专业化别名属性查找具有特定专业化集合的所有公司。

我试过这个,但它返回所有记录没有限制(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);

通常我想以活动记录的方式获取下一个 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))

【问题讨论】:

    标签: sql activerecord yii


    【解决方案1】:

    差不多了。您应该使用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);
    

    【讨论】:

      【解决方案2】:

      解决方法就是添加

      $criteria->together=true;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多