You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从TypeORM迁移到Prisma:如何传入关联关系变量到Prisma函数

在Prisma中实现可变关联关系(替代TypeORM的relations参数)

TypeORM里用字符串数组relations指定关联的方式,在Prisma中需要转换为嵌套的include对象来实现。因为Prisma的include接收结构化对象而非字符串数组,所以得先把传入的关联字符串数组解析成对应对象结构。

实现步骤

  1. 写一个转换函数,将["car", "car.wheels"]这类字符串数组转成Prisma要求的include格式。
  2. 在查询函数里用转换后的对象作为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 20:55:23