如何为其他用户创建模型

Posted

技术标签:

【中文标题】如何为其他用户创建模型【英文标题】:How to create model for other User 【发布时间】:2021-09-25 17:24:04 【问题描述】:

我一直在做一个项目,我最近开始关注其他用户的用户并看到我正在使用的内容(prisma、graphql 和 nexus)所以今天我创建了一个如下模型,它看起来像这样

model Following 
id       Int    @id @default(autoincrement())
followId Int
User     User?  @relation(fields: [userId], references: [id])
userId   Int?

我认为这会起作用,但我意识到它只会将我作为用户返回,而不是我关注的用户,所以我的问题是如何解决这个问题,我会创建另一个模型还是只是在当前模型上重新调整一些东西

【问题讨论】:

【参考方案1】:

如果我没记错的话,对于每个用户,您需要以下内容:

    能够添加/删除User AUser B的关注者 查找关注某个用户的User 记录。 查找User某个用户正在关注的记录。

您不一定需要明确定义单独的模型。相反,您可以为此使用many-to-manyself-relation。这是您的 User 模型在 Prisma Schema 中的样子

model User 
  id        String  @id @default(uuid())  // or whatever your unique id field is. 

  following User[]   @relation("UserFollows", references: [id]) 
  followers User[]   @relation("UserFollows", references: [id])

  // ...other fields in user table

添加/删除某个用户的关注者

如果用户记录已经存在,您可以像这样添加另一个用户作为关注者:

const updatedUser = await prisma.user.update(
        where: 
            id: followedUserId,
        ,
        data: 
            followers: 
                connect:    // change to disconect for removing a follower. 
                    id: followerUserId,
                ,
            ,
        ,
    );

您还可以通过将 connect 调用更改为 disconnect 调用来从其他用户的关注者中删除用户。

查找用户的关注者和关注列表。

您可以这样做来获取user 记录以及他们的关注者和关注列表。

 const user = await prisma.user.findUnique(
        where: 
            id: userId,
        ,
        include: 
            followers: true,   // list of followers for userId
            following: true,   // list of users that follow userId
        ,
    );

您可以在 Prisma Docs 的 concept guide 中了解有关自我关系的更多信息。

【讨论】:

【参考方案2】:

看看这个:

https://www.prisma.io/dataguide/datamodeling/making-connections#introduction 和

似乎您正在尝试创建一对多关系:

https://www.prisma.io/docs/concepts/components/prisma-schema/relations/one-to-many-relations

【讨论】:

以上是关于如何为其他用户创建模型的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 如何为用户-地图-属性一次在链接表中保存多条记录?

如何为其他网站创建嵌入代码

如何为单个模型保存多个单独的记录

如何为“其他 - 请指定”制作单选按钮?

如何为表的创建用户、创建日期、修改用户、修改日期编写查询

如何为 gtalk 创建一个搜索在线帮助 Java 的机器人?