首页 文章

添加限制sequelize findAll会破坏查询?

提问于
浏览
2

我正在尝试返回一组 Model ,使用 limitoffset 分页,包括该模型的收藏夹的分组计数 . 一个相当微不足道的尝试 .

这是我用sequelize的基本查询设置:

var perPage = 12;
var page = 1;

return Model.findAll({

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

这会生成(相当)预期的查询:

SELECT          "model"."id",
                "model".*,
                Count("favorites"."id") AS "favorites_count",
                "favorites"."id"        AS "favorites.id"
FROM            "model"                 AS "model"
LEFT OUTER JOIN "favorite"              AS "favorites"
ON              "model"."id" = "favorites"."model_id"
GROUP BY        "model"."id",
                "favorites"."id" offset 12;

忽略它引用表的事实,并选择 favorites.id (强制我将其添加到group by子句),并且它已将事物随机别名为其确切名称或无意义的名称,如 "favorites.id" (所有不需要的),它似乎有效 . 但现在让我们完成分页并为查询添加限制:

...
offset: perPage * page
limit: perPage

它现在生成此查询:

SELECT "model".*,
    "favorites"."id" AS "favorites.id"
FROM   (SELECT "model"."id",
            "model".*,
            Count("favorites"."id") AS "favorites_count"
        FROM   "model" AS "model"
        GROUP  BY "model"."id",
                "favorites"."id"
        LIMIT  12 offset 12) AS "model"
    LEFT OUTER JOIN "favorite" AS "favorites"
                    ON "model"."id" = "favorites"."model";

在完全令人困惑的行为中,它生成了一个内部查询并仅将限制应用于该限制,然后将其别名为 "model" .

作为一个完整性检查,我在文档中查找了findAll,但是文档do not seem to think that command exists .

我怀疑我做错了什么,但我无法弄清楚它是什么 . 这种行为非常棒,我希望我的睡眠剥夺是导致我困惑的原因 .

我正在使用版本 2.0.6

1 回答

相关问题