我使用下面的代码从表中获取所有结果:
Search.forge()
.fetchAll()
.then(function (collection) {
res.json({error: false, data: collection.toJSON()});
})
但是我需要分页,我认为我可以用限制和偏移来做,但到目前为止我还没有找到任何东西来提供限制和偏移选项。
这是可能的,还是我必须用Knex构建我的查询?
答案 0 :(得分:8)
Knex查询构建器应该有所帮助,首先你必须调用collection.query()
,以便书架进入knex查询构建器
Models.forge()
.query(function(qb) {
//qb is knex query builder, use knex function here
qb.offset(0).limit(10);
})
.fetchAll().then(function(result) {
res.json(result.toJSON());
})
所以knex查询构建器功能 - > http://knexjs.org/#Builder现已免费提供
答案 1 :(得分:2)
这就是你如何使用Bookshelf的分页。考虑到你有一个Post模型,例如:
Post.query(function (qb) {
qb.orderBy('id', 'DESC');
qb.limit(20);
}).fetchAll()
.then(function (collection) {
})
但请注意,所有where子句必须出现在limit和orderBy子句之前。
答案 2 :(得分:1)
截至6/2018,尽管核心的Bookshelf.js仍不包含对分页的内置支持,但还有plugin to do exactly that。它使您可以根据需要以“ page / pageSize”或“ offset / limit”格式表示分页,而under the hood似乎利用了knex的内置偏移量和查询限制功能。代码示例:
Search.forge()
.fetchPage({ offset: 30, limit: 10 })
.then(function (collection) {
res.json({error: false, data: collection.toJSON()});
})
答案 3 :(得分:0)
到目前为止,没有bookhelf.js解决方案。使用knex查询构建器可以轻松实现。