「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モデルを介して関係として検索する場合にのみ失敗します。
あなたがこれについて持っているかもしれないどんな洞察にも感謝します。