在TypeORM(JavaScript)中实现关联查询:将Toys嵌套到Kids中
如何在TypeORM(JavaScript)中嵌套查询关联的Toys数据到Kids中
要实现将Toys嵌套在Kids属性中的查询结果,需要完成以下三个核心步骤:
1. 创建Toys实体并配置关联
首先创建ToysEntity.js文件,定义Toys表结构以及与Kids的多对一关联:
var {EntitySchema} = require("typeorm") module.exports = new EntitySchema({ name: "Toys", tableName: "toy", columns: { toy_id: { primary: true, type: "integer" }, kid_id: { type: "integer" }, toy_name: { type: "varchar" }, for: { type: "varchar" } }, relations: { kid: { target: "Kids", type: "many-to-one", joinColumn: { name: "kid_id" } } } });
2. 修改Kids实体,添加与Toys的一对多关联
更新KidsEntity.js,在relations中添加Toys的关联配置:
var {EntitySchema} = require("typeorm") module.exports = new EntitySchema({ name: "Kids", tableName: "kid", columns: { kid_id: { primary: true, type: "integer", }, profile_id: { primary: true, type: "integer" }, kid_name: { type: "varchar" }, age: { type: "integer" } }, relations: { profile: { target: "Profile", type: "many-to-one", joinColumn: { name: "profile_id" } }, // 新增Toys关联 toys: { target: "Toys", type: "one-to-many", inverseSide: "kid" } } });
注意:你原有的实体代码中
name属性后缺少冒号(如name "Profile"),需修正为name: "Profile",否则会触发语法错误。
3. 修改查询语句,嵌套加载关联数据
更新查询的relations配置,通过嵌套对象的方式指定加载Kids下的Toys数据:
const data = await connection.getRepository("Profile").find({ where: { name: "Doe" }, relations: { kids: { toys: true } } });
执行上述代码后,即可得到你期望的嵌套结构:
[ { "profile_id": 1, "name": "Doe", "age": 28, "kids": [ { "kid_id": 1, "profile_id": 1, "kid_name": "Coco", "age": 2, "toys": [ { "toy_id": 1, "kid_id": 1, "toy_name": "Golf Set", "for": "2-3" }, { "toy_id": 2, "kid_id": 1, "toy_name": "Trucks", "for": "2-3" } ] }, { "kid_id": 2, "profile_id": 1, "kid_name": "Melon", "age": 3, "toys": [ { "toy_id": 3, "kid_id": 2, "toy_name": "Barbie", "for": "3-5" } ] } ] } ]
内容的提问来源于stack exchange,提问作者p3ac3
相关产品推荐
相关产品推荐

