我在StackOverflow上搜索了一些答案,但找不到任何能解决我问题的答案,所以就这样了。 我有2个模型,动作和用户。一个用户可以喜欢许多操作,许多用户都可以喜欢一个操作。
user.js的
module.exports = (sequelize, DataTypes) => {
const user = sequelize.define('User', {
name: {
type: DataTypes.STRING,
allowNull: false
},
username: {
type: DataTypes.STRING,
allowNull: false,
unique: true
},
}, {
freezeTableName: true,
})
user.associate = (models) => {
user.hasMany(models.Action, {
onDelete: 'CASCADE',
onUpdate: 'CASCADE'
})
user.belongsToMany(models.Action, {
as: 'users_that_liked',
through: 'Like',
foreignKey: 'userId',
onDelete: 'CASCADE',
onUpdate: 'CASCADE'
})
}
return user
}
Action.js
module.exports = (sequelize, DataTypes) => {
const action = sequelize.define('Action', {
title: {
type: DataTypes.STRING,
allowNull: false
},
}, {
freezeTableName: true
})
action.associate = (models) => {
action.belongsTo(models.User, {
onDelete: 'CASCADE',
onUpdate: 'CASCADE'
})
action.belongsToMany(models.User, {
through: 'Like',
foreignKey: 'actionId',
onDelete: 'CASCADE',
onUpdate: 'CASCADE'
})
}
return action
}
这是我的方法:
get_action (req, res) {
return Action
.findOne({
attributes: ['id', 'title'],
where: {
id: req.params.id
},
include: [
{
model: User,
attributes: ['id', 'name']
}
{
model: User,
as: 'users_that_liked'
}
]
})
.then(action => res.status(200).send(action))
.catch(error => res.status(500).send(error.toString()))
}
第一个包含我希望让用户“发布”此操作,而第二个我希望得到所有喜欢此操作的用户。 当我运行此方法时,它会说:“SequelizeEagerLoadingError:用户多次与Action关联。要识别正确的关联,您必须使用'as'关键字来指定要包含的关联的别名。”
只是为了它,我尝试取出下一部分,但错误消息说别名'users_that_liked'不正确:
{
model: User,
attributes: ['id', 'name']
}
我是在定义错误的模型吗?