Yii2: SQLSTATE[42S22]: 找不到列: 1054 "order 子句"中的未知列"status"。无法过滤或排序



我在我的搜索模型中添加了一个自定义列(状态(,以根据其他两个列的值显示确定或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_recarregadovalorMoeda是数据库表列的名称,请尝试此查询条件:

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;然后尝试排序