我有三个表,结构描述如下:
用户表包含字段:id
,name
,date_created
图书馆表包含字段:id
,capacity
,date_created
,user_id
user_id是User表的外键,Library的每个实例都必须属于用户。
最后一个表是Books表,其中包含以下字段:id
,status
,date_created
,library_id
。
library_id是Library表的外键,书的每个实例都必须属于Library。
我想要实现的是一种查询数据库以查找属于用户的图书的所有实例并且状态为例如:borrowed
答案 0 :(得分:0)
我认为您需要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");
}
})
答案 1 :(得分:0)
首先要实现连接,需要在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 associaitions的信息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'
}
})