如何在TypeORM关联查询构建器中通过UUID关联实体并添加其他实体
解决方案
无需预先查询实体,仅通过UUID完成多对多关联保存有两种可行方式:
方式一:使用主键字段名匹配的对象传递给of方法
如果你的Post实体主键字段是uuid,需确保传递给of方法的对象键名与实体主键字段完全一致(部分旧版TypeORM可能对非id主键的识别存在兼容问题,建议使用较新版本):
const postUuid = "53c06b96-0945-4dd0-b19e-e3b57e0fc66d"; await dataSource.createQueryBuilder() .relation(Post, "categories") .of({ uuid: postUuid }) // 键名必须和实体的主键字段名严格匹配 .add(3);
方式二:直接向多对多关联表插入关联记录
多对多关系会自动生成中间关联表(默认命名规则为[实体名1小写]_[实体名2小写],也可通过@JoinTable的name属性自定义),直接通过Query Builder向该表插入关联数据:
const postUuid = "53c06b96-0945-4dd0-b19e-e3b57e0fc66d"; await dataSource.createQueryBuilder() .insert() .into("post_categories") // 替换为你的实际关联表名 .values({ postUuid: postUuid, // 关联表中对应Post主键的字段名,需与实体配置一致 categoryId: 3 // 关联表中对应Category主键的字段名 }) .execute();
注意:关联表的字段名由TypeORM自动生成,若实体主键字段不是默认的id,字段名通常为[实体名小写][主键字段名](比如Post的uuid对应postUuid),可直接查看数据库表结构确认字段名。
内容的提问来源于stack exchange,提问作者Pedram
相关产品推荐
相关产品推荐

