升级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
相关产品推荐
相关产品推荐

