连续1:n关系始终为空数组

时间:2019-09-09 07:48:09

标签: node.js sequelize.js

projectstats之间存在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并由我自己执行时,查询将按预期工作(由于该项目的多个统计信息,结果有多行)。

请问我的人际关系定义有什么问题吗?

谢谢

1 个答案:

答案 0 :(得分:0)

不需要where条件,您可以这样简单地完成此操作:

models.Project.findByPk(req.params.projectId, {
  include: [
    {
      model: models.Stats, as: 'stats', 
      required: false
    }
  ]
}).then((project) => {
  // project.get().stats // Check now
})