簡體   English   中英

Yii CGridView BELONGS_TO關系搜索:數值比較運算符失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM