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

2023-12-23 19:20

本文主要是介绍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": "市场分析"
//   },
// ]

这篇关于typeorm联表查询:副表json格式放到主表字段下或多个副表字段并列主表字段的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/529169

相关文章

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

浅谈mysql的sql_mode可能会限制你的查询

《浅谈mysql的sql_mode可能会限制你的查询》本文主要介绍了浅谈mysql的sql_mode可能会限制你的查询,这个问题主要说明的是,我们写的sql查询语句违背了聚合函数groupby的规则... 目录场景:问题描述原因分析:解决方案:第一种:修改后,只有当前生效,若是mysql服务重启,就会失效;

MySQL多列IN查询的实现

《MySQL多列IN查询的实现》多列IN查询是一种强大的筛选工具,它允许通过多字段组合快速过滤数据,本文主要介绍了MySQL多列IN查询的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析与优化1.

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

python dict转换成json格式的实现

《pythondict转换成json格式的实现》本文主要介绍了pythondict转换成json格式的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下... 一开始你变成字典格式data = [ { 'a' : 1, 'b' : 2, 'c编程' : 3,

Java实现XML与JSON的互相转换详解

《Java实现XML与JSON的互相转换详解》这篇文章主要为大家详细介绍了如何使用Java实现XML与JSON的互相转换,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. XML转jsON1.1 代码目的1.2 代码实现2. JSON转XML3. JSON转XML并输出成指定的

Jackson库进行JSON 序列化时遇到了无限递归(Infinite Recursion)的问题及解决方案

《Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursion)的问题及解决方案》使用Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursi... 目录解决方案‌1. 使用 @jsonIgnore 忽略一个方向的引用2. 使用 @JsonManagedR

Python实现合并与拆分多个PDF文档中的指定页

《Python实现合并与拆分多个PDF文档中的指定页》这篇文章主要为大家详细介绍了如何使用Python实现将多个PDF文档中的指定页合并生成新的PDF以及拆分PDF,感兴趣的小伙伴可以参考一下... 安装所需要的库pip install PyPDF2 -i https://pypi.tuna.tsingh

mybatis-plus 实现查询表名动态修改的示例代码

《mybatis-plus实现查询表名动态修改的示例代码》通过MyBatis-Plus实现表名的动态替换,根据配置或入参选择不同的表,本文主要介绍了mybatis-plus实现查询表名动态修改的示... 目录实现数据库初始化依赖包配置读取类设置 myBATis-plus 插件测试通过 mybatis-plu