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