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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:05:48