[英]Yii CGridView BELONGS_TO relation search: Numeric comparison operator fails
我在“ PointMutationsVarscan”模型中設置了CGridView小部件,以在名為“ GeneExpressionCufflinksGene”的相關模型中搜索非pk數值
我用消除歧義的常用方法在PointMutationsVarscan模型中聲明了搜索變量:
public $patient_gecg_search;
PointMutationsVarscan中的搜索規則包含搜索變量:
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,
)
);
本質上,問題在於我無法對此屬於關系列的對象進行數字比較搜索(> <=等)。 它僅進行字符串匹配搜索。 例如,如果我搜索123,它將返回所有與123相匹配的數字fpkm值,但是如果我執行<123或> 1,則它不返回任何記錄,它們會以您期望的本地參數的方式顯示。
fpkm是數據庫中的雙精度浮點數。 我可以在GeneExpressionCufflinksGene模型自己的CGridView小部件內對fpkm使用比較運算符。 僅當通過PointMutationsVarscan模型作為關系搜索時,比較運算符才會失敗。
感謝您對此的任何見解。
解決方案......
$criteria->addSearchCondition("geneExpressionCufflinksGene.fpkm",$this->patient_gecg_search, $escape=true, $operator='OR');
我添加了轉義參數,並將運算符更改為OR而不是默認的AND。 我的猜測是,它還在其中的某個位置進行字符串搜索,並且使用OR運算符還允許在進行字符串比較之外進行比較操作。 顯然有些事情我不理解,但是無論如何,數值比較現在都能返回正確的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.