gpt4 book ai didi

node.js - Sequelize 产生无效查询 "model.id AS model.id"

转载 作者:行者123 更新时间:2023-12-03 22:42:38 24 4
gpt4 key购买 nike

这是我正在为我的模型计算收藏夹的 Sequelize 电话:

Model.findAll({

group: [ 'model.id', 'favorites.id' ],
attributes: [
'*',
[ Sequelize.fn('count', Sequelize.col('favorites.id')), 'favorites_count' ]
],
include: [
{ attributes: [], model: Favorite },
]

});

这是它产生的查询:
SELECT
model.id,
model.*,
count(favorites.id) AS favorites_count,
favorites.id AS favorites.id # Invalid!
FROM models AS model ...

这是错误
ERROR:  syntax error at or near "."
LINE 1: SELECT model.*, favorites.id AS favorites.id, ...
^

因为 favorites.id 不是有效的 AS 别名。为什么 Sequelize 会产生这个
别名无效,如何防止?

最佳答案

您无法阻止它 - sequelize 需要为该列设置别名。查询无效,因为您已将 quoteIdentifiers 设置为 false。查询 Sequelize 想要的是 "favorites"."id" AS "favorites.id"
为什么 Sequelize 会做你可能会说的这种“愚蠢”的事情。好吧,让我们举个例子:

SELECT "model"."id", "favorites"."id" ...

这会产生以下结果集:
[{ id: 42 }]

由于两列具有相同的名称,因此它们会相互覆盖,因此仅返回其中一列。所以我们需要为收藏夹列设置别名,这样我们就可以得到
[{ id: 42, 'favorites.id': 87 }]

关于node.js - Sequelize 产生无效查询 "model.id AS model.id",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29934335/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com