我使用Sequelize来处理数据库。
我有三个表如下所示User
Item
Like
User
与Item
呈1∶N关系。这意味着一个用户可以在我的程序上创建多个项目。
此外,用户可以处理喜欢(收藏)状态时,点击心脏图标。所以我在User
和Item
之间建立了N:M的关系。它创建的Like
表的属性为userIdx和itemIdx。
以下是关系:
db.User.hasMany(db.Item, { foreignKey: 'userIdx', sourceKey: 'userIdx' });
db.User.belongsToMany(db.Item, { through: 'Like', foreignKey: 'userIdx' });
项db.Item.belongsTo(db.User, { foreignKey: 'userIdx', targetKey: 'userIdx' });
db.Item.belongsToMany(db.User, { through: 'Like', foreignKey: 'itemIdx' });
和
db.Like.belongsTo(db.User, { foreignKey: 'userIdx' });
db.Like.belongsTo(db.Item, { foreignKey: 'itemIdx' });
我想用join(include)
获得两个信息- 创建项目的用户
- 几个喜欢这个项目的用户
const result = await Item.findAll({
include: [
{
model: User
}
],
})
但是它只显示userIdx创建了item。我还想获得所有喜欢该项目的用户。
item: {
...
userIdx: (show by user-item 1:n relationship),
likeStateUsers: [(show by user-item n:m relationship)]
...
}
感谢阅读
first of all update item model.
db.Item.belongsTo(db.User, {as:'createdbyUser', foreignKey: 'userIdx', targetKey: 'userIdx' });
//add this line to item model
db.Item.hasMany(db.Like, {as:'itemlikes', foreignKey: 'userIdx', sourceKey: 'userIdx' });
then write this code
const result = await Item.findAll({
include: [
{
model: User ,as:'createdbyUser' ,
},
{model:Like,as:'itemlikes',
include:[{
model:User
}]
}],
})