Как реализовать JOIN в Sequelize - PullRequest
0 голосов
/ 28 мая 2018

У меня есть три таблицы, и структура описывается следующим образом:

Таблица пользователя содержит поля: id, name, date_created

Таблица библиотеки содержит поля: id, capacity, date_created, user_id

user_id - это внешний ключ для таблицы User, и каждый экземпляр библиотеки должен принадлежать пользователю.

Последняя таблица - Booksтаблица, которая содержит поля: id, status, date_created, library_id.

library_id - это внешний ключ для таблицы библиотеки, и каждый экземпляр книги должен принадлежать библиотеке.

Я пытаюсь добиться того, чтобы запросить в БД все экземпляры книги, которая принадлежит пользователю и имеет статус, например: borrowed

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Для реализации объединений сначала необходимо установить связи между моделями сиквелиза.Итак, в вашем случае

models.Library.hasMany(models.Books, {
    foreignKey: 'library_id'
})

models.Books.belongsTo(models.Library, {
    foreignKey: 'library_id'
})

models.Library.belongsTo(models.User, {
    foreignKey: 'user_id'
})

models.Books.hasMany(models.Library, {
    foreignKey: 'user_id'
})

здесь, models является экземпляром сиквела.Вы можете найти больше о секвелировании ассоциаций здесь http: //docs.sequelizejs.com/manual/tutorial/associations.html

   Now, To find all instances of Books that belongs to User

    models.User.findAll({
        include: [{
            model: models.Library,
            required: true, // do an INNER Join 
            include: [{
                model: models.Books,
                required: true,
                where: {
                    status: 'borrowed'
                }
            }] t
        }],
        where: {
            user_id: 'some_user_id'
        }
    })
0 голосов
/ 28 мая 2018

Я думаю, include это то, что вам нужно, пожалуйста, проверьте ниже запрос:

Books.findAll({
    include : { //<------ By this you can use association
        model : User ,
        where : { id : YOUR_USER_ID }
    },
    where : { status : 'borrowed' }    
}).then(books => {
    if(books.length > 0) {
        console.log(books);
    } else {
        console.log("No books found");
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...