Yii如何用查询结果搜索模型(populate activedataprovider)?

时间:2014-06-09 16:20:19

标签: php mysql yii

我使用搜索症状表单,并将症状代码传递给我的diseaseController

症状和疾病都有模型类,但连接2的表没有。

我使用此查询查找具有特定症状的所有疾病

           $diseaseCodes = Yii::app()->db->createCommand()
                    ->select ('ICD10')
                    ->from('tbl_disease')
                    ->join('tbl_symptom_disease', 'tbl_disease.ICD10=tbl_symptom_disease.diseaseCode')
                    ->where('symptomCode=:symptomCode', 
                            array(':symptomCode'=>$_GET['symptomCode']))
                    ->queryAll();

现在我想知道如何使用它来填充数据提供者来填充gridview

我的一个想法是创建一个自定义模型函数

public function queryResultSearch($diseaseArray)
{
    $criteria=new CDbCriteria;

    $criteria->compare('ICD10',$diseaseArray,true);

    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
    ));
}

并使用它来渲染yii的管理操作(对于疾病模型),但是我无法让它工作,因为可能我的整个过程都是错误的。

是的,有人能帮帮我吗?如何使用mysql查询结果填充activedataprovider对象。

感谢您的时间

2 个答案:

答案 0 :(得分:1)

在您的控制器操作中,您可以尝试:

    $model=new ModelName('search');
    $model->unsetAttributes();

    if(isset($_GET['ModelName']))
        $model->attributes=$_GET['ModelName'];

   $diseaseCodes = Yii::app()->db->createCommand()
        ->select ('ICD10')
        ->from('tbl_disease')
        ->join('tbl_symptom_disease', 'tbl_disease.ICD10=tbl_symptom_disease.diseaseCode')
        ->where('symptomCode=:symptomCode', 
                array(':symptomCode'=>$_GET['symptomCode']))
        ->queryAll();

    $diseaseArray=array();
    foreach ($diseaseCodes as $dc) {
        $diseaseArray[]=$dc['ICD10'];
    }

    $criteria=new CDbCriteria;
    $criteria->compare('ICD10',$diseaseArray,true);

    $dataProvider = new CActiveDataProvider(get_class($model),array('criteria'=>$criteria));
    $dataProvider->criteria->mergeWith($model->search()->criteria);
    $this->render('view',array(
            'model'=>$this->loadModel($id),
            'dataProvider'=> $dataProvider,
             ));

答案 1 :(得分:0)

您将要使用CArrayDataProvider。这不太理想..你必须自己实现所有的排序和分页

使用模型和实现类似于

的情况要好得多
public function queryResultSearch($diseaseArray)
{
    $criteria=new CDbCriteria;
    $criteria->compare('ICD10',$diseaseArray,true);
    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
    ));
 }

为了制作你的第一个模型,我个人会使用Gii。