繁体   English   中英

我是否允许在 Sequelize 中定义用户和服务器模型之间的多对多和一对多关系?

[英]Am I allowed to define both many-to-many and one-to-many relationships between User and Server models in Sequelize?

我有 2 个模型,称为 User 和 Server,我对它们关系的口头描述是这样的:

  1. 用户可以创建服务器,因此是其所有者。 按照这个逻辑,我需要在这两个模型之间实现一对多的关系。 这意味着服务器应该有一个 userId 列,其中包含用户/所有者的 id。

  2. 用户可以加入很多服务器,一个服务器可以被很多用户加入,所以我需要在这两个模型之间实现多对多的关系,并且还要有一个联结表。

所以我的问题是我可以像这样在模型之间应用两种关系:

let User = require('./models/User');
let ServerUser = require('./models/ServerUser');
let Server = require('./models/Server');

User.hasMany(Server)
Server.belongsTo(User)

User.belongsToMany(Server, { through: ServerUser });
Server.belongsToMany(User, { through: ServerUser });

让我觉得这行不通的原因是——一旦建立了关系,Sequelize 就会为您提供一些可以使用的神奇方法。 例如,在我的情况下,我有这个:

let name = req.body.name;
let thumbnail = req.body.image;
let userId = req.body.userId

let user = await User.findByPk(userId)

let socketServer = await Server.create({
    name: name,
    thumbnail: thumbnail
});

user.addServer(socketServer)

由于我已经定义了用户和服务器之间的关系,我可以使用 addServer() 根据模型之间的关系是一对多还是多对多来执行两件事之一。

  1. 如果我定义了多对多关系,则执行user.addServer(socketServer)将在联结表中创建一条记录,该记录将链接 userId 和 serverId。

  2. 如果我定义了一对多关系,执行user.addServer(socketServer)会将服务器的 userId 列更新为用户的 id

所以现在我已经应用了模型之间的两种关系,当我执行user.addServer(socketServer)时,我只用用户的 id 更新服务器的 userId 列但是我没有在联结表中得到记录这创建了多对多的关系。

这让我相信我一次只能使用一种关系,但是如果没有这两种关系,我该如何实现我想要实现的目标呢?

观点

在我看来,您提出的逻辑似乎是用户创建服务器,而服务器内的用户不断创建服务器。 结果正确吗?

一个用户不应该创建服务器和其他用户 go 到服务器

我的建议是在用户和服务器之间创建一对多并具有特权表,因此创建服务器的一个用户有权获得他或她想要的任何东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM