Sequelize 中的参考字段是什么?

Cod*_*tle 5 javascript sequelize.js graphql sequelize-auto

我有一个用户表,其中有一个角色表的外键列。

我在 mysql 中定义了所有关系,并使用sequelize-auto我生成了模型。

为用户生成的模型是这样的:

  const user = sequelize.define('user', {
    Id: {
      type: DataTypes.INTEGER(11),
      allowNull: false,
      primaryKey: true,
      autoIncrement: true,
    },
    Email: {
      type: DataTypes.STRING(45),
      allowNull: false,
      unique: true,
    },
    RoleId: {
      type: DataTypes.INTEGER(11),
      allowNull: false,
      references: {
        model: 'roles',
        key: 'Id',
      },
    },
  });
Run Code Online (Sandbox Code Playgroud)

我认为我的参考已设置,因此当我在解析器中执行以下操作时:

users: async () => {
  const users = await db.user.findAll({
    include: [
      {
        model: db.roles,
      },
    ],
  });

return users
Run Code Online (Sandbox Code Playgroud)

我应该在操场上使用以下查询返回用户角色列表:

{users
  {roles
   {Name, Id}
  }
}
Run Code Online (Sandbox Code Playgroud)

相反我得到了

角色未与用户关联!

后来我发现我需要建立一个关联:

  user.associate = models => {
    user.hasMany(models.roles, {
      foreignKey: 'Id',
      sourceKey: 'RoleId',
      onDelete: 'cascade',
    });
  };
Run Code Online (Sandbox Code Playgroud)

然后就成功了。

我仍然不明白这在用户模型中有何用处?:

 references: {
    model: 'roles',
    key: 'Id',
  },
Run Code Online (Sandbox Code Playgroud)

我认为这是我与角色表的“关联”,但如果没有我明确添加关联,这根本没有任何作用。有人可以解释一下field的含义吗references

Ana*_*oly 2

引用用于描述迁移中的模型以及使用同步功能自动创建表。要操作数据(而不是结构),您可以使用像user.hasMany这样的关联