我想要包含一个BelongsTo协会
我有2个模特
用户,团队 团队有很多用户,但用户只属于一个团队,团队有团队领导
这是用户模型定义
module.exports = (sequelize, DataTypes) => {
const user = sequelize.define('user', {
username: {
type: DataTypes.STRING,
allowNull: false
},
password: {
type: DataTypes.STRING,
allowNull: false
},
team_id: {
type: DataTypes.INTEGER,
allowNull: false
}
},
{
classMethods: {
associate: (models) => {
user.belongsTo(models.team,{
targetkey: 'id',
foreignKey: 'team_id'
});
},
},
});
return user;
};
这是团队模型定义
module.exports = (sequelize, DataTypes) => {
const team = sequelize.define('team', {
name: {
type: DataTypes.STRING,
allowNull: false
},
leader: {
type: DataTypes.INTEGER,
allowNull: false
}
{
classMethods: {
associate: (models) => {
team.hasMany(models.user, {
foreignKey: 'id'
});
team.belongsTo(models.user,{
targetkey: 'id',
foreignKey: 'leader'
});
},
},
});
return team;
};
我想在列表用户时获取每个用户的团队信息 像这样的东西
{
"id": 3,
"username": "user123",
"password": "password",
"team_id": 1,
"team": {
"name": "name",
"leader": "leader_name"
}
}
我试图加入团队,但回复是空的
这是代码:
list(req, res){
return models.user.findAll({
include: [{
model: models.team
}],
offset: req.query.offset,
limit: req.query.limit
})
.then(function(users){
res.status(200).send(users)
})
.catch(function(error){
res.status(400).send(error)
})
}
回复是空的
输出为{} 错误是 团队未与用户
相关联方言:postgres
数据库版本:9.6.3
Sequelize版本:3.30.4
我没有使用别名,我想知道我的定义可能有什么问题
非常感谢帮助
答案 0 :(得分:0)
执行以下操作
associate: (models) => {
models.team.hasMany(models.user, {
foreignKey: 'id'
});
models.team.belongsTo(models.user,{
targetkey: 'id',
foreignKey: 'leader'
});
}
对于用户来说也是如此,因为内部使用的模型超出了范围,所以最好用模型来引用它。
答案 1 :(得分:0)
我没注意到安装的续集版本(由npm)是最新的一个v4,它有不同的语法,我通过回到v3解决了问题
的Sequelize文档