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

时间:2018-02-23 11:02:51

标签: php yii2

我在搜索模型中添加了一个自定义列(状态),以根据其他两列的值显示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添加到列中的方式。

2 个答案:

答案 0 :(得分:1)

如果我正确地认为Dinheiro_recarregadovalorMoeda是数据库表列的名称,请尝试以下查询条件:

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