php - Yii CGridView BELONGS_TO 关系搜索 : Numeric comparison operator fails

标签 php mysql gridview yii belongs-to

我在我的“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 View 中的 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 是数据库中的 double float 。我可以在 GeneExpressionCufflinksGene 模型自己的 CGridView 小部件中对 fpkm 使用比较运算符。比较运算符仅在通过 PointMutationsVarscan 模型作为关系进行搜索时失败。

感谢您对此的任何见解。

最佳答案

以及解决方案......

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

我添加了转义参数并将运算符更改为 OR 而不是默认的 AND。我的猜测是它也在某处进行字符串搜索,并且使用 OR 运算符允许在字符串比较之外进行比较操作。显然有一些我不理解的地方,但无论如何,数字比较现在返回正确的结果。

关于php - Yii CGridView BELONGS_TO 关系搜索 : Numeric comparison operator fails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12863386/

相关文章:

php - Laravel 5 Controller 将 JSON 整数作为字符串发送

php - Laravel:使用更新的迁移将列添加到表中

php - MySQL数据库搜索php问题

asp.net - 从 asp.net gridview 模板列内的复选框获取数据

gridview - Yii2 GridView 有条件隐藏列

.net - 如何在gridview中组合下拉列表和空字段?

php - 关闭浏览器或选项卡时注销用户

使用 4 个表、LEFT JOIN 和 WHERE EXISTS 的 MySQL 查询

JavaFx 将实体模型绑定(bind)到 TableView

javascript - 使用javascript函数将IP插入数据库?