SequelizeJS – hasMany 到 hasMany 在同一张表上与连接表

本教程将介绍SequelizeJS - hasMany 到 hasMany 在同一张表上与连接表的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

SequelizeJS - hasMany 到 hasMany 在同一张表上与连接表 教程 第1张

问题描述

我的问题很简单:

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

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

这是我的漂亮图表:

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

在续集中,按照我的逻辑,我会写:

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

但是好像这样不行,已经2个小时了,我正在尝试几种方法来写这个关系......

唯一对我有用的是

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

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

但是我无法在我的查找查询中加入 users 表(通过 急切加载),它只是返回 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'}]})

好了关于SequelizeJS - hasMany 到 hasMany 在同一张表上与连接表的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。