首页 > 解决方案 > OffSet + Limit 查询返回错误的结果与adonis / node.js

问题描述

我需要使用 adonis 进行此查询:

SELECT * FROM book_unit where book_id = 1 ORDER BY unit desc LIMIT 1 OFFSET 2

所以,我做这个功能:

async procuraProximoSequence(bookId, offSet, maxRecords){
    console.log(offSet)
    console.log(maxRecords)
    const historicoQuery = BookUnit.query()
    .where('book_id', bookId)
    .orderBy(['unit', 'sequence'], 'asc')
    if(offSet !== null){
        historicoQuery.offset(offSet)
    }
    if(maximoRegistros !== null){
        historicoQuery.limit(maxRecords)
    }

    return await historicoQuery.paginate(1, 100)
}

这是 offSet、maxRecords 和 knex 执行的查询的 console.log() 值:

2 <br>
1 <br>
  knex:query select count(*) as "total" from "book_unit" where "book_id" = ? limit ? offset ? undefined +8ms
 knex:bindings [ 1, 1, 2 ] undefined +111ms

如果我打印查询结果,我不会收到任何行:

VanillaSerializer {
  rows: [],
  pages: { total: 0, perPage: 100, page: 1, lastPage: 0 },
  isOne: false }

查询的预期行是这个图像: 在此处输入图像描述

标签: node.jsknex.jsadonis.js

解决方案


看起来我不能.limit().paginate()

就我而言,我做了这个更正:

async procuraProximoSequence(bookId, offSet, maximoRegistros){
    console.log(bookId, offSet, maximoRegistros)
    const historicoQuery = BookUnit.query()
    .where('book_id', bookId)
    .orderBy(['unit', 'sequence'], 'asc')
    if(offSet !== null){
        historicoQuery.offset(offSet)
    }
    if(maximoRegistros !== null){
        return await historicoQuery.limit(maximoRegistros).fetch()
    }

    return await historicoQuery.paginate(1, 100)
}

现在一切正常


推荐阅读