首页 > 解决方案 > 升级 Yii2 版本后查询不工作

问题描述

我正在将 Yii2 应用程序从 Yii 2.0.6 迁移到 Yii 2.0.37

有一个用于初始化 SqlDataProvider 的 SQL 查询:

$dataProvider = new SqlDataProvider([
    'sql' => 'SELECT * FROM new_form nf JOIN company_quote_log cql ON nf.log_id = cql.log_id JOIN company_quote_status_log cqsl ON cql.id = cqsl.company_quote_log_id WHERE cqsl.status_id IN (1,2,3,4,5,6,7) GROUP BY cql.log_id',
    'sort' => [
        'defaultOrder' => [
            'form_id' => SORT_DESC
        ], 
        'attributes' => ['crdate', 'form_id']
    ],
    'pagination' => [
        'pageSize' => 5550,
    ]
]);

这 3 个表有一个id列。

在旧版本中,它执行完美。在新版本中它抛出:

Database Exception – yii\db\Exception
SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'id'

似乎需要重命名列以使 Yii 接受此查询。

MySql 服务器在两个环境中是相同的版本。

标签: phpmysqlyii2

解决方案


通过明确命名上下文真正需要的列来修复,这些列在GridView.

这通常是糟糕的代码。正如nbkSELECT table.* ...在评论中提到的那样,这是不好的做法。


推荐阅读