我使用搜索症状表单,并将症状代码传递给我的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对象。感谢您的时间
答案 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。