首页 > 解决方案 > 在 sequelize 中定义与自引用表的 belongsToMany 关系

问题描述

我有“用户”表,其中 phoneNumber 作为表列。

我想有关联,以便每个用户可以添加许多联系人......基本上联系人将是其他用户。

通常在多对多关系中,我们有两个表和一个连接表。但是我可以有一个表,即用户表和一个引用用户本身的连接表吗?

我的用户表:

const User = sequelize.define(
    "users",
      phone_number: {
        type: DataTypes.STRING,
        allowNull: false,
        unique: true,
      } );

我可以在没有“联系人表”的情况下使用此关联来关注“UserContact”加入表吗

User.associate = (models) => {
    models.User.belongsToMany(models.Contact, {through: 'UserContact' })
  };

我的 UserContact 表:

const UserContact = sequelize.define(
    "user_contacts",
    {
      user_id: {
        type: DataTypes.INTEGER,
        allowNull: false,
      },
      contact_id: {
        type: DataTypes.INTEGER,
        allowNull: false,
      },
    }
  );

有没有其他方法,比如通过用户表本身的某个字段引用联系人?同样,一个用户应该有一个或多个联系人。

标签: sqlsequelize.js

解决方案


您可以User在关联中指示模型并为双方指示字段:

User.associate = (models) => {
    models.User.belongsToMany(models.User, {through: 'UserContact' }, foreignKey: 'user_id', otherKey: 'contact_id')
  };

推荐阅读