Node.js 返回错误值的association fooInstance.getBars()中的sequelize方法

Node.js 返回错误值的association fooInstance.getBars()中的sequelize方法,node.js,orm,sequelize.js,associations,Node.js,Orm,Sequelize.js,Associations,我有两个模型,通过另一个模型具有多对多关联。默认情况下,Sequelize会为这两个模型创建实例方法,大家都知道() 我的问题是fooInstance.getBars()方法和fooInstance.countBars()都返回了错误的记录数 数据库是使用sequelize迁移文件设置的 下面是3个模型 module.exports = (sequelize, DataTypes) => { const User = sequelize.define( "User",

我有两个模型,通过另一个模型具有多对多关联。默认情况下,Sequelize会为这两个模型创建实例方法,大家都知道()

我的问题是fooInstance.getBars()方法和fooInstance.countBars()都返回了错误的记录数

数据库是使用sequelize迁移文件设置的

下面是3个模型

module.exports = (sequelize, DataTypes) => {
  const User = sequelize.define(
    "User",
    {
      firstName: DataTypes.STRING
    },
    {}
  );
  User.associate = function(models) {
    // associations can be defined here
    User.belongsToMany(models.Week, {
      through: models.Roster,
      foreignKey: {
        name: "weekId"
      }
    });
  };
  return User;
};
在测试这些方法之前,我在几周内创建了1条记录,在users中创建了5条记录,然后在rosters中使用5个花名册.create()创建了5个关联

当我在routes文件中执行如下查询时
wait Week.getUsers()
,它不是在数组中返回5个用户,而是在数组中返回1个用户。类似地,
wait Week.countUsers()
代码返回1而不是5

请帮忙

如果我遗漏了任何重要信息,请告诉我

谢谢大家!

就像上面说的:

当在两个模型之间定义关联时,这些模型的实例将获得特殊的方法来与其关联的对应对象进行交互

您正试图在模型类上调用这些特殊方法。以下是一个工作示例:

从'../../db'导入{sequelize};
从“sequelize”导入{Model,DataTypes,belongTomanyGetAssociationsMixin,belongTomanyCountAssociationsMixin};
类用户扩展模型{}
User.init(
{
名字:DataTypes.STRING,
},
{sequelize,modelName:'User'},
);
班级周扩展模式{
publicGetUsers!:belongTomanyGetAssociationsMixin;
公共countUsers!:belongTomanyCountAssociationsMixin;
}
Week.init(
{
日期:{
类型:DataTypes.DATE,
allowNull:错,
独一无二:没错,
},
},
{sequelize,modelName:'Week'},
);
类扩展模型{}
花名册.init(
{
周末:{
类型:DataTypes.INTEGER,
allowNull:错,
独特的:错误,
},
用户标识:{
类型:DataTypes.INTEGER,
阿洛诺:是的,
独特的:错误,
},
},
{sequelize,modelName:'花名册'},
);
User.belongtomany(星期,{通过:花名册,外键:{姓名:'weekId'}});
Week.belongTomany(用户,{通过:花名册,外键:{name:'userId',allowNull:true}});
(异步函数测试(){
试一试{
//创建表
wait sequelize.sync({force:true});
//种子
const week=等待周。创建(
{
日期:新日期(),
用户:[
{名字:'詹姆斯'},
{firstName:'elsa'},
{firstName:'tim'},
{名字:'李'},
{名字:“茉莉花”},
],
},
{include:[用户]},
);
//试验
const count=wait week.countUsers();
log('count:',count);
const users=wait week.getUsers();
log('users count:',users.length);
}捕获(错误){
console.log(错误);
}最后{
等待续集。关闭();
}
})();
执行结果:

执行(默认):如果存在“花名册”级联,则删除表;
执行(默认):如果存在“周”级联,则删除表;
执行(默认):如果存在“用户”级联,则删除表;
执行(默认):如果存在“用户”级联,则删除表;
执行(默认):如果不存在“User”(“id”SERIAL,“firstName”VARCHAR(255),主键(“id”)),则创建表;
执行(默认):选择i.relname作为名称,ix.indprimary作为主要,ix.indunique作为唯一,ix.indkey作为indkey,array_agg(a.attnum)作为列索引,array_agg(a.attname)作为列名称,pg_get_indexdef(ix.indexrelid)作为pg_class t,pg_class i,pg_index ix的定义,pg_属性a,其中t.oid=ix.indrelid和i.oid=ix.indexrelid和a.attrelid=t.oid和t.relkind='r'和t.relname='User'按i.relname分组,ix.indexrelid,ix.indprimary,ix.indisunique,ix.indkey按i.relname排序;
执行(默认):如果存在“周”级联,则删除表;
执行(默认):创建表,如果不存在“周”(“id”序列,“日期”时间戳,时区不为NULL唯一,主键(“id”);
执行(默认):选择i.relname作为名称,ix.indprimary作为主要,ix.indunique作为唯一,ix.indkey作为indkey,array_agg(a.attnum)作为列索引,array_agg(a.attname)作为列名称,pg_get_indexdef(ix.indexrelid)作为pg_class t,pg_class i,pg_index ix的定义,pg_属性a,其中t.oid=ix.indrelid和i.oid=ix.indexrelid和a.attrelid=t.oid和t.relkind='r'和t.relname='Week'按i.relname分组,ix.indexrelid,ix.indprimary,ix.indisunique,ix.indkey按i.relname排序;
执行(默认):如果存在“花名册”级联,则删除表;
执行(默认):创建表,如果不存在“花名册”(“weekId”整数不为空,则在更新级联上的删除级联上引用“用户”(“id”);在更新级联上的删除级联上引用“周”(“id”);唯一(“weekId”,“userId”);主键(“weekId”,“userId”);
执行(默认):选择i.relname作为名称,ix.indprimary作为主要,ix.indunique作为唯一,ix.indkey作为indkey,array_agg(a.attnum)作为列索引,array_agg(a.attname)作为列名称,pg_get_indexdef(ix.indexrelid)作为pg_class t,pg_class i,pg_index ix的定义,pg_属性a,其中t.oid=ix.indrelid和i.oid=ix.indexrelid和a.attrelid=t.oid和t.relkind='r'和t.relname='LOSTER'按i.relname分组,ix.indexrelid,ix.indisprimary,ix.indisunique,ix.INDEQUINE按i.relname排序;
执行(默认):在“星期”(“id”,“日期”)中插入返回*的值(默认值,$1);
正在执行(默认):在“用户”(“id”,“firstName”)中插入值(默认值,$1),返回*;
正在执行(默认):在“用户”(“id”,“firstName”)中插入值(默认值,$1),返回*;
正在执行(默认):在“用户”(“id”,“firstName”)中插入值(默认值,$1),返回*;
正在执行(默认):在“用户”(“id”,“firstName”)中插入值(默认值,$1),返回*;
执行(默认):插入到“用户”(“id”,“firstNa”)中

"use strict";
module.exports = (sequelize, DataTypes) => {
  const Week = sequelize.define(
    "Week",
    {
      date: {
        type: DataTypes.DATE,
        allowNull: false,
        unique: true
      }
    },
    {}
  );
  Week.associate = function(models) {
    // associations can be defined here
    Week.belongsToMany(models.User, {
      through: models.Roster,
      foreignKey: {
        name: "userId",
        allowNull: true
      }
    });
  };
  return Week;
};

"use strict";
module.exports = (sequelize, DataTypes) => {
  const Roster = sequelize.define(
    "Roster",
    {
      weekId: {
        type: DataTypes.INTEGER,
        allowNull: false,
        unique: false
      },
      userId: {
        type: DataTypes.INTEGER,
        allowNull: true,
        unique: false
      }
    },
    {}
  );
  Roster.associate = function(models) {
    // associations can be defined here
  };
  return Roster;
};