sequelize findandcountall不在关联中的行

cqoc49vn  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(421)

有两个表: 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使用的内部连接造成的。

eanckbw9

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); });

jei2mxaa

jei2mxaa2#

使用include的正确语法

Books.findAll({
    include: [{
      model: BorrowedBooks,
      where: {
        bookId: null
      }
    }],
    offset: offset,
    limit: limit,
    distinct: true
}).then(...).catch(...);

相关问题