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

升级MikroORM v6遇qb.raw不存在问题,求替代方案

MikroORM v6 中替代 qb.raw() 的方案

MikroORM v6 移除了 QueryBuilder 实例上的 raw() 方法,你可以通过以下两种方式替代原有的功能:

方式一:使用 sql() 工具函数

这是最接近原 qb.raw() 用法的方案,需要先从核心包导入 sql 函数,再用模板字符串包裹原生SQL片段:

import { sql } from '@mikro-orm/core';

// ...

const qb = em.createQueryBuilder(Category);

return qb
  .update({ score: sql`score + 1` })
  .where({
    category: p.category.id,
    user: v.from.id,
    userCat: { $ne: null },
  })
  .execute();

sql 模板字符串会被框架解析为原生SQL表达式,和原 qb.raw() 的作用完全一致,复杂原生SQL场景也适用。

方式二:使用类型安全的表达式语法

如果你想避免直接写原生SQL,可以用框架提供的表达式API,这种方式更符合ORM的类型安全特性:

const qb = em.createQueryBuilder(Category);

return qb
  .update({ score: (expr) => expr.add('score', 1) })
  .where({
    category: p.category.id,
    user: v.from.id,
    userCat: { $ne: null },
  })
  .execute();

框架会自动将这个表达式转换为对应的 score + 1 SQL语句,同时保留类型检查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 13:42:05