我的“PointMutationsVarscan”模型中有一个CGridView小部件,用于搜索相关模型中的数字非pk值,称为“GeneExpressionCufflinksGene”
我以通常的方式声明PointMutationsVarscan模型中的搜索变量以消除歧义:
public $patient_gecg_search;
PointMutationsVarscan中的搜索规则包含搜索var:
array('id, ... patient_gecg_search, geneExpressionCufflinksGene', 'safe', 'on'=>'search'),
模型关系:
'geneExpressionCufflinksGene' => array(self::BELONGS_TO,'GeneExpressionCufflinksGene',array('gene'=>'gene_id')),
搜索功能:
public function search()
{
$criteria=new CDbCriteria;
$criteria->compare('id',$this->id,true);
// yada yada
$criteria->with[] = 'geneExpressionCufflinksGene';
if($this->patient_gecg_search) {
$criteria->compare( 'geneExpressionCufflinksGene.fpkm', $this->patient_gecg_search, true);
$criteria->addSearchCondition("geneExpressionCufflinksGene.fpkm",$this->patient_gecg_search);
}
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'sort'=>array(
'attributes'=>array(
'patient_search'=>array(
'asc'=>'patient.id',
'desc'=>'patient.id DESC',
),
'patient_gecg_search'=>array(
'asc'=>'geneExpressionCufflinksGene.fpkm',
'desc'=>'geneExpressionCufflinksGene.fpkm DESC',
),
'*',
),
),
));
}
在GeneExpressionCufflinksGene模型规则中,fpkm是一个数值:
array('fpkm, fpkm_conf_lo, fpkm_conf_hi', 'numerical'),
PointMutationsVarscan视图中的CGridView小部件:
$criteria=new CDbCriteria;
$dataProvider=$model->search();
$dataProvider->pagination = array('pageSize' => 15);
$columns=array();
$columns[]= array(
'name' => 'patient_gecg_search',
'value'=>'$data->geneExpressionCufflinksGene->fpkm',
'type' => 'raw',
'htmlOptions'=>array('style'=>'width:250px;'),
);
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'point-mutations-varscan',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>$columns,
)
);
基本上问题是我无法对此属于关系列进行数字比较搜索(>< = etc)。它只进行字符串匹配搜索。例如,如果我搜索123,它将返回与123匹配的所有数字fpkm值,但是如果我执行< 123或> 1它不会返回任何记录,那么它们就是您期望的本地参数。
fpkm是数据库中的双精度浮点数。我可以在GeneExpressionCufflinksGene模型自己的CGridView小部件中使用fpkm上的比较运算符。只有在通过PointMutationsVarscan模型搜索关系时,比较运算符才会失败。
感谢您对此可能有任何见解。
答案 0 :(得分:1)
解决方案......
$criteria->addSearchCondition("geneExpressionCufflinksGene.fpkm",$this->patient_gecg_search, $escape=true, $operator='OR');
我添加了转义参数并将运算符更改为OR而不是默认AND。我的猜测是它也在那里进行字符串搜索,并且使用OR运算符允许除了字符串比较之外还进行比较操作。显然,有些东西我不理解,但无论如何,数字比较现在会返回正确的结果。