我在我的搜索模型中添加了一个自定义列(状态(,以根据其他两个列的值显示确定或nok。但是,由于不在数据库中,我无法按该列进行排序或过滤。
我使用后连接函数找到了此线程:将属性添加到不在数据库中的YII2活动记录模型
我将列添加到模型的规则
[['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添加到列的方式。
如果我正确地假设Dinheiro_recarregado
和valorMoeda
是数据库表列的名称,请尝试此查询条件:
if ($this->status === 'OK') {
$query->andWhere('Dinheiro_recarregado = valorMoeda');
} elseif ($this->status === 'NOK') {
$query->andWhere('Dinheiro_recarregado <> valorMoeda');
}
SELECT CASE
WHEN Dinheiro_recarregado = valorMoeda
THEN 'OK'
ELSE 'NOK'
END as status,* FROM Product order By status ASC
更改您的查询有点像上面的&amp;然后尝试排序