从TypeORM迁移到Prisma:如何传入关联关系变量到Prisma函数
在Prisma中实现可变关联关系(替代TypeORM的relations参数)
TypeORM里用字符串数组relations指定关联的方式,在Prisma中需要转换为嵌套的include对象来实现。因为Prisma的include接收结构化对象而非字符串数组,所以得先把传入的关联字符串数组解析成对应对象结构。
实现步骤
- 写一个转换函数,将
["car", "car.wheels"]这类字符串数组转成Prisma要求的include格式。 - 在查询函数里用转换后的对象作为
include参数。
完整代码示例
// 把关联字符串数组转换成Prisma的include对象结构 function parseRelationsToInclude(relations: string[]) { const include: Record<string, any> = {}; relations.forEach(relation => { const parts = relation.split('.'); let current = include; parts.forEach((part, index) => { if (index === parts.length - 1) { current[part] = true; } else { current[part] = current[part] || { include: {} }; current = current[part].include; } }); }); return include; } // Prisma版本的getUser函数 static async getUser(userId: string, relations: string[]) { const include = parseRelationsToInclude(relations); return await prisma.user.findUnique({ where: { id: userId }, include, }); } // 调用方式和TypeORM完全一致 const user = await getUser("123", ["car", "car.wheels"]);
说明
- 转换函数会自动处理带
.的嵌套关联,比如car.wheels会被解析为{ car: { include: { wheels: true } } }。 - 如果只传一级关联(如
["car"]),转换后就是{ car: true },完全符合Prisma的include语法要求。
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

