У меня есть виджет CGridView в моей модели «PointMutationsVarscan», настроенный для поиска числового значения, отличного от 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'),
Виджет CGridView в представлении PointMutationsVarscan:
$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, он вернет все числовые значения fpkm, соответствующие 123, но если я наберу ‹123 или> 1, он не вернет никаких записей, как вы ожидаете для локального параметра.
fpkm — это число с плавающей запятой двойной точности в базе данных. Я могу использовать операторы сравнения для fpkm в собственном виджете CGridView модели GeneExpressionCufflinksGene. Операторы сравнения терпят неудачу только при поиске в качестве отношения через модель PointMutationsVarscan.
Спасибо за любое понимание, которое у вас может быть по этому поводу.