Sequelize产生无效的查询" model.id AS model.id"

时间:2015-04-29 04:22:06

标签: node.js postgresql sequelize.js

这是我用我的模特计算最爱的续集电话:

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会产生这个 无效别名以及如何防止它?

1 个答案:

答案 0 :(得分:0)

你无法阻止它 - 续集需要别名列。由于您已将quoteIdentifiers设置为false,因此查询无效。查询sequelize want是"favorites"."id" AS "favorites.id"

为什么续集会做这样一个"愚蠢的"你可能会说的话。好吧举个例子:

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

这会产生以下结果集:

[{ id: 42 }]

因为这两列具有相同的名称,所以它们会相互覆盖,因此只返回其中一列。所以我们需要为收藏夹列别名,以便我们得到

[{ id: 42, 'favorites.id': 87 }]