gpt4 book ai didi

node.js - 如何在 Node 中使用 Sequelize 自连接

转载 作者:太空宇宙 更新时间:2023-11-03 23:29:55 24 4
gpt4 key购买 nike

我正在使用sequelize-cli进行迁移,并研究了不同的场景,但对于如何自加入似乎没有明确可靠的答案。我想要一个名为“friendships”的连接表,它将用户和 friend (本质上只是用户)连接起来。

更具体地说,试图了解这种情况下“through”和“as”之间的区别。

1) 这是我的友谊表。被第二个关联绊倒了。我创建了两列,一列是 userId,一列是friendId。我希望能够将此表链接到 2 个用户,每个表中有一个用户,其中一列别名为“friendId”。

```

'use strict';
module.exports = function(sequelize, DataTypes) {
var friendship = sequelize.define('friendship', {
userId: DataTypes.INTEGER,
friendId: DataTypes.INTEGER
}, {
classMethods: {
associate: function(models) {
friendship.belongsTo(models.user);
friendship.belongsTo(models.user { as: "friend" });
}
}
});
return friendship;
};

```

2)这是我的用户模型。同样,具体在关联对象中,我不清楚。这里的目标是能够调用 user.friends 并显示该用户 friend 的所有实例。不确定我是否正确使用了“through”和“as”关键字。

```

'use strict';
module.exports = function(sequelize, DataTypes) {
var user = sequelize.define('user', {
username: DataTypes.STRING,
password: DataTypes.STRING,
email: DataTypes.STRING
}, {
classMethods: {
associate: function(models) {
user.hasMany(models.friendship);
user.hasMany(models.user { as: "friends", through: models.friendship });
}
}
});
return user;
};

```

最佳答案

存在多对多关系,应该通过belongsToMany关联,不需要更多的关系。甚至不需要定义friends表,sequelize会自动创建表

'use strict';
module.exports = function(sequelize, DataTypes) {
var user = sequelize.define('user', {
username: DataTypes.STRING,
password: DataTypes.STRING,
email: DataTypes.STRING
}, {
classMethods: {
associate: function(models) {
user.belongsToMany(models.user, {
as: "friends",
through: "friendship",
foreignKey: "userId",
otherKey: "friendId"
});
}
}
});
return user;
};

关于node.js - 如何在 Node 中使用 Sequelize 自连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39455380/

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