Tengo algunas tablas de autorrelación tomadas directamente de uno de los ejemplos de Prisma.
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]) }
Me pregunto cuál es la forma mejor/más idiomática de determinar si un usuario está siguiendo a otro usuario, así como las operaciones para seguir y dejar de seguir. Estoy pensando que la mejor manera es simplemente consultar/actualizar la tabla de seguimientos directamente, pero no estoy seguro de si los campos seguidos por y siguientes en el modelo de usuario se actualizarán automáticamente.
Considere este ejemplo:
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, }, ], });
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);
Aquí está la salida:
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' } } ]
Para actualizar las relaciones cuando alguien deja de seguir, el registro debe eliminarse explícitamente de la follows
tabla en este caso.