当前位置: 首页 > news >正文

typeorm联表查询:副表json格式放到主表字段下或多个副表字段并列主表字段

实体类字段不做映射,typeorm实现联查查询

1、副表json格式放到主表字段下

//goods表和member表联表,关系goods.id = member.uid,member表数据json对象格式放到主表userInfo下
//leftJoinAndMapOne配合getMany实现
const builder = await getConnection().createQueryBuilder();
builder.select(['goods.id','goods.goodName',]).from(DzhPortalGoodsEntity, 'goods')  .leftJoinAndMapOne('goods.userInfo',DzhMemberUserEntity,'member','member.id = goods.uid'); 
const list: any = await builder.getMany();
console.log(list)
//输出
// [
//   {
//         "id": 178,
//         "goodName": "Nature:重大发现!淋巴管竟可产生红细胞和白细胞",
//         "userInfo": {
//             "id": 12,
//             "createTime": "2022-11-23 20:53:33",
//             "nickname": "dzhking",
//             "role_id": 1,
//         }
//     },   
// ] 

2、多个副表字段并列主表字段

//goods表和member表联表,关系goods.id = member.uid,多个副表字段并列主表字段
//leftJoinAndSelect配合getRawMany
// 特别要注意 主表字段要加别名, 子查询里面的附表id一定要填写,不然报错,字段前也不能加别名,也报错
const builder = await getConnection().createQueryBuilder();
builder.select(['goods.id as id','goods.goodName  as id goodName',]).from(DzhPortalGoodsEntity, 'goods')  .leftJoinAndSelect(qb => {return qb.subQuery().select(['id', 'username', 'nickname']).from(DzhMemberUserEntity, 'member');},'member','member.id = goods.uid').groupBy('goods.id'); 
const list: any = await builder.getRawMany();
console.log(list)//把leftJoinAndSelect换成也可以leftJoinAndMapOne.leftJoinAndMapOne('goods.userInfo',qb => {return qb.subQuery().select(['id', 'username', 'nickname']).from(DzhMemberUserEntity, 'member');},'member','member.id = goods.uid')//输出
// [
//   {
//     "id": 178,
//     "username": "dzhking",
//     "nickname": "dzhking",
//     "goodsName": "Nature:重大发现!淋巴管竟可产生红细胞和白细胞"
//   },
// ]

3、副表字段并列主表字段 + 副表字段json格式插入到主表字段 + 关联其他表字段

const builder = getConnection().createQueryBuilder();
builder.select(['goods.id as id','goods.goodName  as goodName',`(SELECT JSON_OBJECT(  'id',id,'username',username,'nickname',nickname )   FROM dzh_member_user member WHERE member.id = goods.uid) as userInfo `,`(SELECT cate.cateName  FROM dzh_portal_cate cate WHERE cate.id = goods.cateId ) as cateName`,]).from(DzhPortalGoodsEntity, 'goods')  .leftJoinAndSelect(qb => {return qb.subQuery().select(['id', 'username', 'nickname']).from(DzhMemberUserEntity, 'member');},'member','member.id = goods.uid').groupBy('goods.id'); 
const list: any = await builder.getRawMany();
//输出
// [
//   {
//     "id": 178,
//     "username": "dzhking",
//     "nickname": "dzhking",
//     "goodName": "Nature:重大发现!淋巴管竟可产生红细胞和白细胞",
//     "userInfo": {
//       "id": 12,
//       "nickname": "dzhking",
//       "username": "dzhking"
//     },
//     "cateName": "市场分析"
//   },
// ]
http://www.lryc.cn/news/267027.html

相关文章:

  • Flume采集日志存储到HDFS
  • redis—String字符串
  • 三相电机转差率为负值的情形
  • 关于Dark Frost 僵尸网络对游戏行业进行DDoS攻击的动态情报
  • MongoDB数据库本地部署并结合内网穿透实现navicat公网访问
  • 前端学习笔记
  • Vue实现响应式布局
  • linux:下载、网络请求、端口
  • 182.【2023年华为OD机试真题(C卷)】敏感字段加密(字符串的分割、替换和拼接实现JavaPythonC++JS)
  • 新版IDEA中Git的使用(三)
  • node - koa 获取 Content-Type: text/plain 的数据
  • 树形结构
  • 《C++避坑神器·二十四》简单搞懂json文件的读写之根据键值对读写Json
  • SQL进阶理论篇(二十一):基于SQLMap的自动化SQL注入
  • xtu oj 1055 整数分类
  • (2023|CVPR,Corgi,偏移扩散,参数高斯分布,弥合差距)用于文本到图像生成的偏移扩散
  • ACE中为socket增加keepalive策略(windows和linux)
  • 前端工程注入版本号
  • Android 10.0 SystemUI禁用长按recent键的分屏功能
  • 自媒体实战篇:作品爆款三要素的使用场景和重要性
  • Hbase的安装配置
  • VMware17Pro虚拟机安装Linux CentOS 7.9(龙蜥)教程(超详细)
  • QT trimmed和simplified
  • Ensp dhcp全局地址池(配置命令 + 实例)
  • spring aop实际开发中怎么用,Spring Boot整合AOP,spring boot加spring mvc一起使用aop,项目中使用aop
  • C语言操作符if语句好习惯 详解分析操作符(详解4)
  • 【什么是泛型,有什么好处】
  • Stable Diffusion系列(三):网络分类与选择
  • Twincat中PLC的ST语言编程实现机器人安全交互
  • Redis实现日榜|直播间榜单|排行榜|Redis实现日榜01