如何在 Prisma 中 query/update 自关联?
How to query/update a self-relation in Prisma?
我有一些自我关系 table 直接取自 Prisma 的 examples。
model User {
id Int @id @default(autoincrement())
name String?
followedBy Follows[] @relation("follower")
following Follows[] @relation("following")
}
model Follows {
follower User @relation("follower", fields: [followerId], references: [id])
followerId Int
following User @relation("following", fields: [followingId], references: [id])
followingId Int
@@id([followerId, followingId])
}
我想知道 best/most 确定用户是否正在关注另一个用户的惯用方法,以及关注和取消关注的操作。我认为最好的方法是直接 query/update Follows table,但我不确定用户模型中的 followedBy 和 following 字段是否会自动更新。
考虑这个例子:
- 创建用户:
const createUsers = await prisma.user.createMany({
data: [
{
name: 'user1',
},
{
name: 'user2',
},
{
name: 'user3',
},
],
});
- 定义跟随关系
const followUsers = await prisma.follows.createMany({
data: [
{
followerId: 1,
followingId: 2,
},
{
followerId: 1,
followingId: 3,
},
{
followerId: 2,
followingId: 3,
},
],
});
- 要获取谁是用户 1 的关注者,可以通过用户模型以及如下所述的以下模型来实现:
const findFollowersThroughUser = await prisma.socialUser.findMany({
where: {
following: {
some: {
followerId: 1,
},
},
},
});
console.log('findFollowersThroughUser', findFollowersThroughUser);
const findFollowersThroughFollow = await prisma.follows.findMany({
where: {
followerId: 1,
},
include: {
following: true,
},
});
console.log('findFollowersThroughFollow', findFollowersThroughFollow);
这是输出:
findFollowersThroughUser [ { id: 2, name: 'user2' }, { id: 3, name: 'user3' } ]
findFollowersThroughFollow [
{
followerId: 1,
followingId: 2,
following: { id: 2, name: 'user2' }
},
{
followerId: 1,
followingId: 3,
following: { id: 3, name: 'user3' }
}
]
为了在有人取消关注时更新关系,在这种情况下,需要明确地从 follows
table 中删除记录。
我有一些自我关系 table 直接取自 Prisma 的 examples。
model User {
id Int @id @default(autoincrement())
name String?
followedBy Follows[] @relation("follower")
following Follows[] @relation("following")
}
model Follows {
follower User @relation("follower", fields: [followerId], references: [id])
followerId Int
following User @relation("following", fields: [followingId], references: [id])
followingId Int
@@id([followerId, followingId])
}
我想知道 best/most 确定用户是否正在关注另一个用户的惯用方法,以及关注和取消关注的操作。我认为最好的方法是直接 query/update Follows table,但我不确定用户模型中的 followedBy 和 following 字段是否会自动更新。
考虑这个例子:
- 创建用户:
const createUsers = await prisma.user.createMany({
data: [
{
name: 'user1',
},
{
name: 'user2',
},
{
name: 'user3',
},
],
});
- 定义跟随关系
const followUsers = await prisma.follows.createMany({
data: [
{
followerId: 1,
followingId: 2,
},
{
followerId: 1,
followingId: 3,
},
{
followerId: 2,
followingId: 3,
},
],
});
- 要获取谁是用户 1 的关注者,可以通过用户模型以及如下所述的以下模型来实现:
const findFollowersThroughUser = await prisma.socialUser.findMany({
where: {
following: {
some: {
followerId: 1,
},
},
},
});
console.log('findFollowersThroughUser', findFollowersThroughUser);
const findFollowersThroughFollow = await prisma.follows.findMany({
where: {
followerId: 1,
},
include: {
following: true,
},
});
console.log('findFollowersThroughFollow', findFollowersThroughFollow);
这是输出:
findFollowersThroughUser [ { id: 2, name: 'user2' }, { id: 3, name: 'user3' } ]
findFollowersThroughFollow [
{
followerId: 1,
followingId: 2,
following: { id: 2, name: 'user2' }
},
{
followerId: 1,
followingId: 3,
following: { id: 3, name: 'user3' }
}
]
为了在有人取消关注时更新关系,在这种情况下,需要明确地从 follows
table 中删除记录。