project
和stats
之间存在1:n的关系。一个项目可以具有多个统计信息。
// Project model definition
const Project = sequelize.define('Project', {
// table columns...
}, {
freezeTableName: true,
});
Project.associate = (models) => {
models.Project.hasMany(models.Stats, { as: 'stats', foreignKey: 'projectId', sourceKey: 'id' });
};
和
// Stats model definition
const Stats = sequelize.define('Stats', {
// ...
projectId: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: 'Project',
key: 'id'
}
},
// ...
}, {
freezeTableName: true,
timestamps: false
});
当我尝试使用其统计信息查询单个项目时:
models.Project.findByPk(req.params.projectId, {
include: [
{
model: models.Stats, as: 'stats', where: { id: models.sequelize.col('project.id') }, required: false
}
]
}).then((project) => {
// project.get().stats always an empty array
})
project.get().stats
始终是一个空数组。但是,当我捕获由Sequelize生成的SQL并由我自己执行时,查询将按预期工作(由于该项目的多个统计信息,结果有多行)。
请问我的人际关系定义有什么问题吗?
谢谢
答案 0 :(得分:0)
不需要where
条件,您可以这样简单地完成此操作:
models.Project.findByPk(req.params.projectId, {
include: [
{
model: models.Stats, as: 'stats',
required: false
}
]
}).then((project) => {
// project.get().stats // Check now
})