加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql – SequelizeJS – hasMany to hasMany在同一个表上有

发布时间:2020-12-11 23:46:08 所属栏目:MySql教程 来源:网络整理
导读:我的问题很简单: 我有一个名为users的表. 这些用户可以有很多联系人.这些联系人是其他用户. 所以我有一个名为userHasContacts的表,其中包含所有者的id(userID)和联系人的id(contactID). 这两个外键都引用用户表. 这是我漂亮的图表: ---------------- _____

我的问题很简单:

我有一个名为users的表.
这些用户可以有很多联系人.这些联系人是其他用户.

所以我有一个名为userHasContacts的表,其中包含所有者的id(userID)和联系人的id(contactID).
这两个外键都引用用户表.

这是我漂亮的图表:

              ----------------  
______________|____      ____|____
| userHasContacts |      | users |
-------------------      ---------
| #userID         |      | id    |
| #contactID      |      ---------
-------------------          |
              |              |
              ----------------

在sequelize中,在我的逻辑中,我会写:

Users.hasMany(Users,{foreignKey: 'userID',joinTableName: 'userHasContacts'} );
Users.hasMany(Users,{as: 'Contacts',foreignKey: 'contactID',joinTableName: 'userHasContacts'} );

但似乎它不能以这种方式工作,而且我已经尝试了几种方式来编写这种关系…

对我有用的唯一一条线是

Users.hasMany(UserHasContacts,{foreignKey: 'contactID',joinTableName: 'userHasContacts'} );

UserHasContacts.findAndCountAll({ where: {userID: id} }).success( function(result) {        
    res.json(result);
});

但后来我无法在查找查询中加入用户表(通过Eager loading),它只返回userHasContacts内的数据.

如果有人有提示,欢迎你!
谢谢提前! 最佳答案 因为你要做的是一个自我关联,你只需要调用一次hasMany,这将创建一个联结表

User.hasMany(User,{ as: 'Contacts',joinTableName: 'userHasContacts'})

这将创建userHasContacts表为:

CREATE TABLE IF NOT EXISTS `userHasContacts` (`userId` INTEGER,`ContactsId` INTEGER,`createdAt` DATETIME NOT NULL,`updatedAt` DATETIME NOT NULL,PRIMARY KEY (`userId`,`ContactsId`)) ENGINE=InnoDB;

要查找用户及其联系人,您可以执行以下操作:

User.find({ where: ...,include: [{model: User,as: 'Contacts'}]})

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读