Sequelize findAndCountВсе строки не в ассоциациях

0

Существуют две таблицы: 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

Я думаю, что ошибка связана с INNER JOIN, который использует Sequelize.

Теги:
sequelize.js

1 ответ

1

Правильный синтаксис для использования включает

Books.findAll({
    include: [{
      model: BorrowedBooks,
      where: {
        bookId: null
      }
    }],
    offset: offset,
    limit: limit,
    distinct: true
}).then(...).catch(...);
  • 0
    Я протестировал эту версию и вернул мне список emtpy, но в таблице Book есть строки, на которые нет ссылок в таблице BorrowedBook.
  • 0
    Вы получаете какую-либо ошибку при использовании этого?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню