postgresql - 如何在 Sequelize 中实现 JOIN

标签 postgresql sequelize.js

我有三个表,结构描述如下:

用户表包含字段: idnamedate_created
库表包含字段: idcapacitydate_createduser_id
user_id 是 User 表的外键,Library 的每个实例都必须属于一个用户。

最后一个表是 Books 表,其中包含以下字段: idstatusdate_createdlibrary_id

library_id 是 Library 表的外键,一本书的每个实例都必须属于一个 Library。

我想要实现的是一种查询数据库中属于用户且状态为例如的书籍的所有实例的方法:borrowed

最佳答案

要首先实现连接,您需要在 Sequelize 模型之间建立关联。
所以,在你的情况下

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是一个 Sequelize 实例。
您可以在 http://docs.sequelizejs.com/manual/tutorial/associations.html 中找到有关 Sequelize 关联的更多信息
   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'
        }
    })

关于postgresql - 如何在 Sequelize 中实现 JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50563463/

相关文章:

postgresql - "LANGUAGE plpgsql VOLATILE COST 100"在函数中是什么意思

sql - 来自 Postgres 存储过程的意外 OUT 值

sql - 如何使用 FULL JOIN 获取空结果表?

mysql - (async) 使用 sequelize 和 node 在 mysql 数据库中创建多个寄存器

sql - 在更新语句中使用窗口函数

java - 如何将 Spring Boot Web 应用程序连接到 postgresql 数据库

javascript - 如何在运行 Node.js 应用程序之前确保 MySQL 数据库存在

node.js - 使用 Id 作为 Post 方法的 Sequelize ExpressJS

mysql - SequelizeEagerLoadingError : (parent) is not associated to (child)!

node.js - 查询中的序列化查询