yii结合addColumnCondition

时间:2015-02-04 11:46:55

标签: mysql activerecord yii entity-attribute-value

提示我如何通过搜索多个属性来解决问题。

我的桌子:
House:id,name,别名
参数:id,name
Parameter_Value:id,house_id,parameter_i,value

需要得到(示例)房子(宽度= 15,高度= 9,泳池= 1,房间= 3) 宽度,高度,游泳池,房间 - 它的参数_值记录

如何组合addColumnCondition?通过几个参数搜索?

1 个答案:

答案 0 :(得分:0)

您可以使用并升级此代码。

行动中:

$parameters = Parameter::model()->findAll();

$criteria = new CDbCriteria();

if ($data = Yii::app()->request->getPost('Parameter')) {
    foreach($data as $i => $parameter) {
        $criteria->addCondition('parameterValues.value = :value' . $i . ' AND parameterValues.parameter_id = :parameterId' . $i);
        $criteria->params[':value' . $i] = $parameter['value'];
        $criteria->params[':parameterId' . $i] = $parameters[$i]->id;
    }
}

$houses = House::model()->with('parameterValues')->findAll($criteria);

$this->render('view', [
    'parameters' => $parameters,
    'houses' => $houses,
]);

在视图中:

<?php
echo CHtml::beginForm();

foreach($parameters as $i => $parameter) {
    echo CHtml::activeTextField($parameter, '[' . $i . ']value');
}

echo CHtml::submitButton('Search');

echo CHtml::endForm();
?>

内部模特:

public function relations() {
    return [
        'parameterValues' => [self::HAS_MANY, 'Parameter_Value', 'house_id'],
        ...
    ];
}

此代码只是示例。我没有测试过。我希望它对你有所帮助。