Sequelize,当一个表与同一个表有belongsTo和belongsToMany关系时如何使用findAll.&l



我使用Sequelize来处理数据库。

我有三个表如下所示UserItemLike

UserItem呈1∶N关系。这意味着一个用户可以在我的程序上创建多个项目。
此外,用户可以处理喜欢(收藏)状态时,点击心脏图标。所以我在UserItem之间建立了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)

获得两个信息
  1. 创建项目的用户
  2. 几个喜欢这个项目的用户

我用下面的代码
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
}]
}],  
})

最新更新