有两个表: Books
,列出可用书籍,以及 BorrowedBooks
,列出当前借阅的书籍。我只想检索当前可用的书籍(不是借来的),提供分页和总数计数。
我会用这个方法 findAndCountAll
由sequelize提供,它确实很容易使用并且完成了大部分工作,但是它不能正常工作。我使用 findAll
方法,该方法工作正常。
Books.findAll({
where: { '$BorrowedBooks.bookId$': null },
include: [BorrowedBooks]
}).then(...).catch(...);
然后我把方法改成 findAndCountAll
,以获取元素的总数,并提供分页。
Books.findAndCountAll({
where: { '$BorrowedBooks.bookId$': null },
include: [BorrowedBooks],
offset: offset,
limit: limit,
distinct: true
}).then(...).catch(...);
此版本产生错误 Unknown column 'BorrowedBooks.bookId' in 'where clause'
.
编辑
生成的代码不起作用的查询如下:
SELECT
`books`.*,
`borrowedBooks`.`bookId` AS `borrowedBooks.bookId`,
`borrowedBooks`.`userId` AS `borrowedBooks.userId`,
FROM
(SELECT
`books`.`id`,
`books`.`title`,
`books`.`author`,
`books`.`isbn`
FROM
`books` AS books`
WHERE
(SELECT
`bookId`
FROM
`borrowedBooks`
WHERE
(`borrowedBooks`.`bookId` = `books`.`id`
AND `borrowedBooks`.`bookId` IS NULL)
LIMIT 1) IS NOT NULL
LIMIT 0 , 10) AS `books`
INNER JOIN
`borrowedBooks` ON `books`.`id` = `borrowedBooks`.`bookId`
AND `borrowedBooks`.`bookId` IS NULL;
如果我直接写下查询,我会这样做:
SELECT * FROM `books`
LEFT OUTER JOIN `borrowedBooks` ON `books`.`id` = `borrowedBooks`.`bookId`
WHERE `borrowedBooks`.`bookId` IS NULL
我认为这个错误是由于sequelize使用的内部连接造成的。
2条答案
按热度按时间eanckbw91#
带sequelize的节点分页
客户端需要提供页面和页面大小
Pass distinct: true
在查询中,它将按您希望的方式工作。你将包括数据以及。const page = 1 const pageSize = 2 const offset = page * pageSize const limit = offset + pageSize return model .findAll({ attributes: [], include: [{}], distinct: true, limit, offset }) .then((tasks) => res.status(200).send(tasks)) .catch((error) => { console.log(error); res.status(400).send(error); });
jei2mxaa2#
使用include的正确语法