Php Yii如何使用查询结果搜索模型(填充activedataprovider)?

Php Yii如何使用查询结果搜索模型(填充activedataprovider)?,php,mysql,yii,Php,Mysql,Yii,我使用搜索症状表,并将症状代码传递给我的diseaseController 症状和疾病都有模型类,但连接2的表没有 我使用此查询查找所有具有特定症状的疾病 $diseaseCodes = Yii::app()->db->createCommand() ->select ('ICD10') ->from('tbl_disease')

我使用搜索症状表,并将症状代码传递给我的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();
现在我想知道如何使用它来填充dataprovider以填充gridview

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

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

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

    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
    ));
}
并使用它来呈现yii的管理操作(针对疾病模型),但我无法让它工作,因为我的整个方法可能都是错误的

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


感谢您抽出时间

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

您最好使用一个模型并实现类似的

public function queryResultSearch($diseaseArray)
{
    $criteria=new CDbCriteria;
    $criteria->compare('ICD10',$diseaseArray,true);
    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
    ));
 }

要制作您的第一个模型,我个人会使用Gii。

在控制器操作中,您可以尝试以下方法:

    $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,
             ));

使用中间表的模型是什么意思?我有一个带有'symptomDiseases'=>array(self::HAS_MANY,'SymptomDisease','symptomCode')的症状模型和一个带有'symptomDiseases'=>array(self::HAS_MANY,'SymptomDisease','diseaseCode')关系的疾病模型。临时表格(tbl_症状_疾病)没有模型(当然所有模型都是用gii制作的),谢谢它的工作:)。请注意:您忘记了一些无用的代码(可能来自粘贴的副本):“returnnew cactivedaptaprovider($this,array('criteria'=>$criteria,);”我还有一个问题,为什么我要直接使用“get_class($model)”而不是类名?我已经删除了return:D。。。从复制/粘贴。。。。我使用get_类是因为您需要将对象作为第一个参数发送到CActiveDataProvider,而在代码中使用$this是因为您的函数是在模型(类)中编写的,不需要使用get_类