【问题标题】:Query no working after upgrading Yii2 version升级 Yii2 版本后查询不工作
【发布时间】:2020-10-09 06:36:55
【问题描述】:

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

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

$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 服务器在两个环境中是相同的版本。

【问题讨论】:

  • 不要使用SELECT *,除此之外是糟糕编程,你可以看到你加入后有2个id文件
  • 不是2,有3列名为id。但是 new_form 表有很多列,超过 100 个(不是我的设计)。是否有解决方法,或者必须明确列出列?

标签: php mysql yii2


【解决方案1】:

通过显式命名真正需要上下文的列,GridView 中使用的列来修复。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-15
    • 1970-01-01
    相关资源
    最近更新 更多