javascript - NestJS 中的 TypeORM - 如何在实体中获取 MySQL 嵌套对象并对子关系进行“位置”查询?
问题描述
我曾尝试以 QueryBuilder 的身份执行此操作:
const ret = await getManager()
.createQueryBuilder(Order, 'o')
.leftJoinAndSelect(PartOfOrder, 'p', 'o.id = p.orderId')
.where(':purcharser = o.purchaserId', { purcharser: purcharserId })
.andWhere(':supplier = p.supplierId', { supplier: supplier.id })
.andWhere('p.status = 0')
.getRawMany();
结果如下:
{
"o_id": "3454d7fe-072a-4983-a811-5ce45106488c",
"o_date": "2021-09-01T07:30:07.000Z",
"o_amount": 20598,
"o_paymentId": "b8c937f0-4d61-4f84-8760-ebb0ec5bc35f",
"o_purchaserId": "5adeb8ed-6703-4e82-a7e3-2b10d8fbf912",
"p_id": "8c6bfc56-aa7a-4d9a-a872-7ccd370a7137",
"p_amount": 200,
"p_delivery": 0,
"p_message": "",
"p_date": "2021-09-01T07:30:07.000Z",
"p_status": 0,
"p_pickupCode": 8073,
"p_supplierId": "e41aff94-343c-4062-b55a-90bf1b3e3695",
"p_orderId": "3454d7fe-072a-4983-a811-5ce45106488c"
}
在这里我有平坦的响应,我需要从 SQL 中嵌套。
下面我有一个find()
查询,我不知道在哪里放置where
嵌套对象。
const ret = await Order.find({
relations: ['partsOfOrder', 'partsOfOrder.products'],
where: { purchaser: purcharserId },
});
编辑
我的订单实体关系道具:
@OneToMany(
type => PartOfOrder,
entity => entity.order,
{
cascade: true,
onDelete: 'CASCADE',
},
)
@JoinColumn()
partsOfOrder: IPartOfOrder[];
我可以在任何循环上对其进行过滤,但服务器会死机,并且确实需要在 SQL 中执行此操作
解决方案
在您的第一个解决方案中尝试使用getMany()
而不是,getRawMany()
您将获得一个嵌套对象。
推荐阅读
- html - 是否可以在输入时间下拉菜单中设置小时和分钟的限制?
- javascript - MongoDB 在 $unwind 之后获取根字段
- c++ - 在 C++ 或替代方案中使用类的全局实例
- javascript - 如何在 highcharter 中使用图像/图标作为标签?R 闪亮
- c# - Specflow 入门教程给出错误 featurefile.cs not found
- windows - Docker - Spring Boot 应用程序与 mysql 的连接
- c++ - C++ 特征逆矩阵
- android - 打包 kivy 应用时,Google Colab 上附加的设备列表为空
- r - 在不安装 Java 的情况下将受密码保护的 xlsx 文件读入 R(密码已知)
- kubernetes - 无法阻止 kubectl pod 重新创建