gpt4 book ai didi

node.js - 如何使用 Feathers 和 Sequelize 定义多对多,并在连接表中添加附加字段?

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

我正在努力寻找解决方案。

我想要拥有可以属于多个组织的用户。每个用户可以在特定组织中拥有不同的角色(我更喜欢偶数角色,但听起来更复杂......)。

在像User_Organization_Role这样的表中,我需要有role(roleId?)、isActive等字段。也许还有更多。

我正在使用 Feathers Plus 生成器,但我认为在这种情况下这并不重要,但是向 schema 文件中添加一些内容可能会有所帮助?

我认为拥有简单的organizationId字段就足够了,但我意识到稍后将其更改为manyToMany会很痛苦,所以我认为现在实现它会更好。

我将不胜感激任何解决方案/建议/最佳实践等。

最佳答案

n:m 关系是迄今为止最难处理的,并且确实没有一刀切的解决方案。最重要的是 read and understand this page and its sub-pages ,然后再阅读两遍以获得更好的效果。尝试一次专注于做一件事。我在本期概述了如何使用 FeathersJS 来解决这个问题:

https://github.com/feathersjs/feathers/issues/852#issuecomment-406413342

相同的技术可以应用于任何应用程序......基本流程如下:

  1. 首先创建或更新您的主要对象(用户、组织、角色等)。目前尚未建立任何关系。您需要先创建对象,然后才能建立任何关系。

  2. 创建或更新关系。这涉及使用步骤 #1 中的数据更新“连接”表(又名:“映射”或“通过”表)。连接表可以(并且应该)有自己的模型。它应该包含您关联的每个对象(userId、organizationId、roleId 等)的外键。您也可以将其他字段放入此表中。

这是一些关于如何定义模型的伪代码(为了简洁起见,仅显示相关代码)。它的内容比我下面描述的要多一些,但这应该可以帮助您入门。

const UserOrganizationRole = sequelize.define('User_Organization_Role', {
// Define any custom fields you want
foo: DataTypes.STRING
})

// Let sequelize add the foreign key fields for you.
// Also, save a reference to the relationship - we will use it later
User.Organization = User.belongsToMany(Organization, { through: UserOrganizationRole });
User.Role = User.belongsToMany(Role, { through: UserOrganizationRole });
Organization.User = Organization.belongsToMany(User, { through: UserOrganizationRole });
Role.User = Role.belongsToMany(User, { through: UserOrganizationRole });

...这是我处理插入的方法

const user = await User.create({ ... });
const org = await Organization.create({ ... });
const role = await Role.create({ ... });

await UserOrganizationRole.create({
userId: user.id,
organizationId: org.id,
roleId: role.id,
foo: 'bar'
});

...最后,像这样加载数据:

// Now we can reference those relationships we created earlier:
const user = await User.findById(123, {
include: [User.Organization, User.Role]
});

const org = await Organization.findById(456, {
include: [Organization.User]
});

关于node.js - 如何使用 Feathers 和 Sequelize 定义多对多,并在连接表中添加附加字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51827290/

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