【发布时间】: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.id或deliver.id。由于您使用的是框架,因此请使用纯文本 sql 功能(如果存在)或将表的结构更改为没有字段的重复名称。 -
是的。我更正了关系函数: public function getDelivers() { return $this->hasMany(Deliver::className(), ['recipient_id' => 'id'])->orderBy(['deliver.id' => SORT_DESC] ); }
-
从您的关系中删除它并将其添加到您的查询构建器中