这是我用我的模特计算最爱的续集电话:
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会产生这个
无效别名以及如何防止它?
答案 0 :(得分:0)
你无法阻止它 - 续集需要别名列。由于您已将quoteIdentifiers
设置为false,因此查询无效。查询sequelize want是"favorites"."id" AS "favorites.id"
为什么续集会做这样一个"愚蠢的"你可能会说的话。好吧举个例子:
SELECT "model"."id", "favorites"."id" ...
这会产生以下结果集:
[{ id: 42 }]
因为这两列具有相同的名称,所以它们会相互覆盖,因此只返回其中一列。所以我们需要为收藏夹列别名,以便我们得到
[{ id: 42, 'favorites.id': 87 }]