gpt4 book ai didi

mysql - SequelizeJS - hasMany 到具有连接表的同一个表上的 hasMany

转载 作者:可可西里 更新时间:2023-11-01 07:06:19 28 4
gpt4 key购买 nike

我的问题很简单:

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

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

这是我的漂亮图表:

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

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

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 表(通过 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'}]})

关于mysql - SequelizeJS - hasMany 到具有连接表的同一个表上的 hasMany,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18950886/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com