【问题标题】:Sequelize 1:n relation always empty arraySequelize 1:n 关系始终为空数组
【发布时间】:2019-09-12 03:10:22
【问题描述】:

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

您能告诉我我的关系定义有什么问题吗?

谢谢

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    不需要where 条件,你可以这样做:

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

    【讨论】:

    • 不幸的是,project.get().stats 仍然是空数组。是的,我确信数据确实存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多