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

如何将指定SQL查询转换为Prisma查询?需支持take分页

将目标SQL转换为Prisma查询的两种方案

方案1:用Prisma内置的自定义排序(无需原生查询)

从Prisma 4.10版本开始,findMany的orderBy支持通过_expr定义自定义排序表达式,刚好可以复现你SQL里的排序逻辑,还能直接用take做分页:

const posts = await prisma.posts.findMany({
  orderBy: {
    _expr: `LEAST(CASE WHEN replyto IS NULL THEN id ELSE replyto END, id)`,
  },
  take: 10, // 每页取10条数据
  // skip: 20, // 翻页时用,比如第3页就跳过前20条
})

这种方式完全用Prisma的ORM语法,不用写原生SQL,分页逻辑也和常规查询保持一致。

方案2:原生查询(兼容所有Prisma版本)

如果你的Prisma版本比较旧,不支持_expr,那就只能用原生查询。直接在SQL里加上LIMIT和OFFSET来对应take和skip实现分页:

const pageSize = 10;
const pageNumber = 1;
const skip = (pageNumber - 1) * pageSize;

const posts = await prisma.$queryRaw`
  SELECT * from posts
  ORDER BY LEAST(
    CASE WHEN ISNULL(replyto) THEN id ELSE replyto END, id
  )
  LIMIT ${pageSize} OFFSET ${skip};
`;

这里直接复用了你原有的SQL逻辑,只是补充了分页参数,灵活性很高。

注意事项

  • 优先选方案1,更贴合Prisma的使用规范,代码可读性更好。
  • 如果用方案1,要确保你的Prisma版本在4.10及以上,旧版本不支持_expr排序。

内容的提问来源于stack exchange,提问作者exebook

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:25:16