如何修改sample.tsx的Prisma查询以获取好友ID与名称?
如何修改Prisma查询以获取好友的ID和名称?
现有Schema定义
model User { id Int @id @default(autoincrement()) name String // Not Null self Friend[] @relation("self") friend Friend[] @relation("friend") } model Friend { id Int @id @default(autoincrement()) user User @relation("self", fields: [userId], references: [id]) userId Int // Foreign Key friend User @relation("friend", fields: [friendId], references: [id]) friendId Int // Foreign Key // @@unique([userId, friendID]) }
当前查询代码及结果
查询代码
const friends = await prisma.user.findUnique({ where: { id: userId, // user ID }, select: { name: true, // user name // Friend Table friend: { select: { userId: true, // friends' ID }, }, }, }); console.log(friends);
查询结果
{ name: 'Paul McCartney', friend: [ { userId: 1 }, { userId: 3 }, { userId: 4 } ] }
期望结果
希望获取当前用户名称的同时,拿到每个好友的ID和名称,两种形式均可:
{ name: 'Paul McCartney', friend: [ { userId: 1 , name: "John Lennon"}, { userId: 3, name: "Ringo starr" }, { userId: 4, name: "George Harrison" } ] }
或者:
{ name: 'Paul McCartney', friendsList: { friendIds: [1, 3, 4], names: ["John Lennon", "Ringo starr", "George Harrison"] } }
修改方案
方案1:直接查询关联的好友用户信息(对应第一种期望结果)
修改查询代码,在friend的select中嵌套查询关联的好友用户记录,获取ID和名称后调整输出结构:
const friends = await prisma.user.findUnique({ where: { id: userId, }, select: { name: true, friend: { select: { // 从关联的friend用户中获取ID和名称 friend: { select: { id: true, name: true, }, }, }, }, }, }); // 转换为期望的格式 const formattedResult = { name: friends?.name, friend: friends?.friend.map(item => ({ userId: item.friend.id, name: item.friend.name, })) || [], }; console.log(formattedResult);
方案2:查询后转换为第二种期望格式
先按方案1的方式获取完整数据,再对结果进行数组拆分:
const friends = await prisma.user.findUnique({ where: { id: userId, }, select: { name: true, friend: { select: { friend: { select: { id: true, name: true, }, }, }, }, }, }); // 转换为第二种格式 const formattedResult = { name: friends?.name, friendsList: { friendIds: friends?.friend.map(item => item.friend.id) || [], names: friends?.friend.map(item => item.friend.name) || [], }, }; console.log(formattedResult);
说明
你的Schema中,Friend模型的friend字段关联的是好友的User记录,通过嵌套select: { friend: { select: { id: true, name: true } } }就能拿到好友的完整信息,再根据需求调整输出结构即可。
内容的提问来源于stack exchange,提问作者K-Yuuma
相关产品推荐
相关产品推荐

