Php Yii CGridView属于关系搜索:数值比较运算符失败

Php Yii CGridView属于关系搜索:数值比较运算符失败,php,mysql,gridview,yii,belongs-to,Php,Mysql,Gridview,Yii,Belongs To,我在“PointMutationsVarscan”模型中设置了一个CGridView小部件,用于搜索相关模型中的数值非pk值,称为“GeneExpressionCufflinksGene” 我在PointMutationsVarscan模型中声明搜索变量,以通常的方式消除歧义: public $patient_gecg_search; PointMutationsVarscan中的搜索规则包含搜索变量: array('id, ... patient_gecg_search, geneExpre

我在“PointMutationsVarscan”模型中设置了一个CGridView小部件,用于搜索相关模型中的数值非pk值,称为“GeneExpressionCufflinksGene”

我在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,
    )
);
本质上,问题是我不能在这个属于关系列上进行数字比较搜索(><=etc)。它只进行字符串匹配搜索。例如,如果我搜索123,它将返回与123匹配的所有数值fpkm值,但如果我搜索1,它不会返回任何记录,它们与您对局部参数的期望方式相同

fpkm是数据库中的双精度浮点。在GeneExpressionCufflinksGene模型自己的CGridView小部件中,我可以在fpkm上使用比较运算符。比较运算符仅在通过PointMutationsVarscan模型作为关系搜索时失败


感谢您对这方面的任何见解

以及解决方案

$criteria->addSearchCondition("geneExpressionCufflinksGene.fpkm",$this->patient_gecg_search, $escape=true, $operator='OR');

我添加了escape参数,并将操作符更改为或而不是default and。我猜它也在某处进行字符串搜索,使用OR运算符可以在字符串比较之外进行比较操作。很明显,有些事情我不明白,但不管怎样,数值比较现在返回正确的结果。

和解决方案

$criteria->addSearchCondition("geneExpressionCufflinksGene.fpkm",$this->patient_gecg_search, $escape=true, $operator='OR');

我添加了escape参数,并将操作符更改为或而不是default and。我猜它也在某处进行字符串搜索,使用OR运算符可以在字符串比较之外进行比较操作。很明显,有些事情我不明白,但不管怎样,数值比较现在返回正确的结果。

不幸的是,这没有起到作用。我认为partial match参数只适用于字符串搜索,因此如果您提供比较运算符,它将不会使用LIKE,而是在字符串中使用运算符和no%。为什么在同一字段上有compare和addSearchCondition?Pentium 10,谢谢。如果我拿出我的addSearchCondition行,它可以很好地进行比较。如果你想把它作为一个答案,我会接受的。这可能就是“or”起作用的原因,因为它添加了字符串条件,我需要or来允许compairson。谢谢:)不幸的是,这没有奏效。我认为partial match参数只适用于字符串搜索,因此如果您提供比较运算符,它将不会使用LIKE,而是在字符串中使用运算符和no%。为什么在同一字段上有compare和addSearchCondition?Pentium 10,谢谢。如果我拿出我的addSearchCondition行,它可以很好地进行比较。如果你想把它作为一个答案,我会接受的。这可能就是“or”起作用的原因,因为它添加了字符串条件,我需要or来允许compairson。谢谢:)