【问题标题】:Yii2 GridView: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in order clause is ambiguousYii2 GridView:SQLSTATE [23000]:违反完整性约束:1052 列 'id' 在 order 子句中不明确
【发布时间】:2021-02-05 06:40:01
【问题描述】:

谁能解释我为什么会收到这个错误?我试图搜索相关信息,但找不到有用的信息。

这是我的功能:

$query = Recipient::find()->from('recipient')
            ->joinWith(['delivers'])
     
    $dataProvider = new ActiveDataProvider([
        'query' => $query,

    ]);

错误是:

SQLSTATE[23000]:违反完整性约束:1052 列 'id' 在 order子句不明确

正在执行的 SQL 是:

SELECT COUNT(*) FROM `recipient` 
LEFT JOIN `deliver` ON `recipient`.`id` = `deliver`.`recipient_id` 
ORDER BY `id` DESC

【问题讨论】:

  • 如果deliver 表有一个id 字段,它不知道它必须选择哪一个。所以你必须在ORDER BY 语句中指定表。 recipient.iddeliver.id。由于您使用的是框架,因此请使用纯文本 sql 功能(如果存在)或将表的结构更改为没有字段的重复名称。
  • 是的。我更正了关系函数: public function getDelivers() { return $this->hasMany(Deliver::className(), ['recipient_id' => 'id'])->orderBy(['deliver.id' => SORT_DESC] ); }
  • 从您的关系中删除它并将其添加到您的查询构建器中

标签: php yii2


【解决方案1】:

试试

Recipient::find()->from('recipient')->joinWith(['delivers'])->orderBy(['`recipient`.`id`' => SORT_ASC]);

在上面的例子中,列名被明确指定以避免歧义错误。

代码似乎不完整。发布更多代码,以便我们为您提供帮助。

【讨论】:

    猜你喜欢
    • 2022-11-24
    • 2019-02-22
    • 2021-08-16
    • 2021-10-11
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    相关资源
    最近更新 更多