簡體   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