我正在尝试返回一组 Model
,使用 limit
和 offset
分页,包括该模型收藏夹的分组计数.一个相当微不足道的尝试。
这是我使用 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 .
我怀疑我做错了什么,但我不知道是什么。这种行为非常奇怪,我希望我的 sleep 不足是造成我困惑的原因。
我正在使用版本 2.0.6
最佳答案
这原来是 Sequelize 中的一个错误。参见 https://github.com/sequelize/sequelize/issues/3623和 https://github.com/sequelize/sequelize/pull/3671
关于node.js - 为 sequelize findAll 添加限制会破坏查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29936007/