【问题标题】:Sequelize many to many relationship with same instance用同一实例续集多对多关系
【发布时间】:2020-07-10 07:17:40
【问题描述】:

我有用户,我想实现添加朋友。 所以这会创建多对多关系,当使用相同的实例时,我如何使用 sequelize 创建多对多关系?

User.belongsToMany(User, {as: "friends", through: "friends})

但我不知道如何处理外键以及它们将被称为什么

【问题讨论】:

    标签: javascript node.js postgresql orm sequelize.js


    【解决方案1】:

    下面的例子使用"sequelize": "^5.21.3":

    import { sequelize } from '../../db';
    import { Model, DataTypes, BelongsToManyAddAssociationMixin } from 'sequelize';
    
    class User extends Model {
      public getFriends!: BelongsToManyAddAssociationMixin<User, string>;
    }
    User.init(
      {
        name: DataTypes.STRING,
      },
      { sequelize, modelName: 'users' },
    );
    
    User.belongsToMany(User, { as: 'friends', through: 'user_friends' });
    
    (async function test() {
      try {
        await sequelize.sync({ force: true });
        // seed
        const friendsOfUser1 = [{ name: 'james' }, { name: 'elsa' }];
        const friendsOfUser2 = [{ name: 'jane' }, { name: 'mike' }];
        await User.bulkCreate(
          [
            { name: 'jeremy', friends: friendsOfUser1 },
            { name: 'lynne', friends: friendsOfUser2 },
          ],
          { include: [{ model: User, as: 'friends' }] },
        );
        const jeremy = await User.findOne({ where: { name: 'jeremy' } });
        const firendsOfJeremy = await jeremy.getFriends();
        console.log(firendsOfJeremy);
      } catch (error) {
        console.log(error);
      } finally {
        await sequelize.close();
      }
    })();
    

    它将创建表user_friends 存储对象的ID。查看数据库中的数据记录:

    node-sequelize-examples=# select * from user_friends;
     userId | friendId
    --------+----------
          1 |        3
          1 |        4
          2 |        5
          2 |        6
    (4 rows)
    
    node-sequelize-examples=# select * from users;
     id |  name
    ----+--------
      1 | jeremy
      2 | lynne
      3 | james
      4 | elsa
      5 | jane
      6 | mike
    (6 rows)
    

    您可以拨打userInstance.getFriends()获取一些用户的朋友。

    【讨论】:

      猜你喜欢
      • 2015-05-16
      • 1970-01-01
      • 1970-01-01
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多