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

如何在Mikro-ORM QueryBuilder中添加CASE表达式并转换指定SQL

转换SQL到Mikro-ORM QueryBuilder并添加自定义字段的实现方法

一、目标SQL的QueryBuilder写法

假设你的实体类分别是SipIdentity(对应表sip_identity,别名si)和SipMapping(对应表sip_mapping),以下是对应的QueryBuilder实现:

方式1:利用实体关联关系(推荐)

如果SipIdentity实体中已经定义了与SipMapping的关联(比如OneToMany类型的sipMappings属性),可以直接通过关联名称关联表:

const qb = orm.em.createQueryBuilder(SipIdentity, 'si');

// 左关联sip_mapping表
qb.leftJoin('si.sipMappings', 'sip_mapping')
  // 选择主表所有字段
  .select('si.*')
  // 添加自定义case表达式字段
  .addSelect(`CASE WHEN sip_mapping.sip_identity_id IS NOT NULL THEN 'false' ELSE 'true' END`, 'available');

// 执行查询,返回原始数据库行结果
const result = await qb.execute();

方式2:手动指定关联条件

如果没有定义实体关联,可以手动写关联条件:

const qb = orm.em.createQueryBuilder(SipIdentity, 'si');

qb.leftJoin(SipMapping, 'sip_mapping', 'sip_mapping.sip_identity_id = si.id')
  .select('si.*')
  .addSelect(`CASE WHEN sip_mapping.sip_identity_id IS NOT NULL THEN 'false' ELSE 'true' END`, 'available');

const result = await qb.execute();

二、如何通过QueryBuilder添加新字段

Mikro-ORM QueryBuilder通过addSelect方法实现自定义字段添加,核心用法:

  • 第一个参数传入自定义SQL表达式(比如CASE语句、聚合计算、拼接字段等)
  • 第二个参数指定字段别名,方便后续读取结果时调用

注意事项:

  • 使用execute()执行查询,返回的是原始数据库行对象,会完整包含你添加的自定义字段
  • 如果使用getResult(),返回的是实体类实例,但实体类未定义的自定义字段不会被映射到实例属性上,这种场景建议用execute()获取原始数据

内容的提问来源于stack exchange,提问作者Jorge González Villanueva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:54:22