我在搜索模型中添加了一个自定义列(状态),以根据其他两列的值显示OK或NOK。 但是我无法对该列进行排序或过滤,因为它不在数据库中。
我使用afterFind函数找到了这个线程: Adding an attribute to yii2 active record model that is not in database
我将该列添加到我的模型的fase规则
[['status'], 'safe'],
并添加到过滤器
if($this->status) {
$query->orFilterWhere(['status'=>$this->status]);
}
但我仍然无法让它发挥作用。
如何对不在数据库中的列进行排序和过滤,在搜索模型中添加了自定义列?
[
'attribute' => 'status',
'value' => function($model){
if($model->Dinheiro_recarregado != $model->valorMoeda){
return 'NOK';
} else {
return 'OK';
}
},
'filter' => function ($model) {
if ($model->status == 'OK' ) {
return 'OK';
} else {
return 'NOK';
}
},
],
将OK和NOK添加到列中的方式。
答案 0 :(得分:1)
如果我正确地认为Dinheiro_recarregado
和valorMoeda
是数据库表列的名称,请尝试以下查询条件:
if ($this->status === 'OK') {
$query->andWhere('Dinheiro_recarregado = valorMoeda');
} elseif ($this->status === 'NOK') {
$query->andWhere('Dinheiro_recarregado <> valorMoeda');
}
答案 1 :(得分:0)
SELECT CASE
WHEN Dinheiro_recarregado = valorMoeda
THEN 'OK'
ELSE 'NOK'
END as status,* FROM Product order By status ASC
更改您的查询有点像上面&amp;然后尝试排序