【问题标题】:Sequelize produces invalid query "model.id AS model.id"Sequelize 产生无效查询“model.id AS model.id”
【发布时间】:2015-04-29 15:43:07
【问题描述】:

这是我正在打的续集调用,用于计算我的模型的收藏夹:

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

【问题讨论】:

    标签: node.js postgresql sequelize.js


    【解决方案1】:

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

    为什么 sequelize 会做你可能会说的这种“愚蠢”的事情。那就举个例子吧:

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

    这会产生以下结果集:

    [{ id: 42 }]
    

    由于两列具有相同的名称,因此它们相互覆盖,因此仅返回其中一列。所以我们需要给收藏列起别名,这样我们就可以得到

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

    【讨论】:

    猜你喜欢
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 2014-04-16
    相关资源
    最近更新 更多