我尝试返回一组Model
s,使用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。
我怀疑我做错了什么,但我无法弄清楚它是什么。这种行为非常棒,我希望我的睡眠剥夺是导致我困惑的原因。
我正在使用版本2.0.6
答案 0 :(得分:1)