Typeorm .loadRelationCountAndMap 返回零

2024-04-09

请帮忙。 我正在尝试执行以下 typeorm 查询:

  return await getRepository(Company)
    .createQueryBuilder("Company")
    .leftJoinAndSelect("Company.plants", "Plant")
    .leftJoinAndSelect("Plant.documents", "Document")
    .leftJoinAndSelect("Plant.notes", "Note")
    .loadRelationCountAndMap("Plant.documentsCount", "Plant.documents")
    .loadRelationCountAndMap("Plant.notesCount", "Plant.notes")
    .getMany();

这个想法是选择每个工厂以及所有公司的所有工厂的文档和注释数量。 (实际上不需要选择笔记和文档本身,但我这样做是为了证明关系确实有效)。

此外,我还指定了占位符变量来在 Plant 实体中保留计数:

  @OneToMany(() => Document, (document) => document.plant)
  documents: Document[];
  documentsCount: number;

  @OneToMany(() => Note, (note) => note.plant)
  notes: Note[];
  notesCount: number;

奇怪的是,返回的 Plant.documentsCount 和 Plant.notesCount 都是 0(而文档和注释的集合不为空并且正在被选择)。

另一个奇怪的事情是,我在 SQL 查询中没有看到任何选择这些计数的尝试,因此我希望 typeorm 本身会进行计数(因为它正确选择了集合)。

有人可以就如何选择这些计数提供一些建议吗?


不幸的是 Typeorm 是最无能的框架。所有重要功能要么已弃用,要么未实现。

为了解决这个特定问题,我必须:

  1. 自己选择集合:
   .leftJoinAndSelect("Plant.documents", "Document")
   .leftJoinAndSelect("Plant.notes", "Note")
  1. 添加计算和冗余关系数组删除:
  @AfterLoad()
  getDocumentsCount() {
    this.documentsCount = this.documents.length;
    delete this.documents;
  }

  @AfterLoad()
  getNotesCount() {
    this.notesCount = this.notes.length;
    delete this.notes;
  }

  1. 决定永远不再使用 TypeORM。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Typeorm .loadRelationCountAndMap 返回零 的相关文章

  • SQL Server 到 er 模型

    是否有程序可以将 SQL Server 数据库图表转换为 er 模型 或者从 SQL Server 服务器创建数据库的 er 模型 在 SQL Server 中 Management Studio 中的每个数据库都有 数据库图 功能 您可以
  • 如何列出表中的所有列?

    对于各种流行的数据库系统 如何列出表中的所有列 对于 MySQL 请使用 DESCRIBE name of table 只要您使用 SQL Plus 或 Oracle 的 SQL Developer 这也适用于 Oracle
  • 无法更新 .mdf 数据库,因为该数据库是只读的(Windows 应用程序)

    我使用 C 创建了一个数据库 Windows 应用程序 我的应用程序在 Windows XP 上成功运行 但在 Vista 或 Windows 7 系统上无法正确执行 我的应用程序显示类似以下内容的消息 无法更新 mdf 数据库 因为该数据
  • SQL:将一个表中的所有记录插入到另一表中,而不指定列

    我想将备份表 foo bk 中的所有记录插入到 foot 表中 而不指定特定的列 如果我尝试这个查询 INSERT INTO foo SELECT FROM foo bk 我会收到错误 插入错误 列名称或提供的值的数量与表定义不匹配 是否可
  • 使用 SqlDataReader.IsDBNull 时使用列名

    我已经得到了从 SQL DB 读取数据的代码 我不知道应该如何编辑它 以便我可以使用原始列名称而不是列索引 string query SELECT FROM zajezd WHERE event thisrow AND year klien
  • 如何将字符串解析为 UNIQUEIDENTIFIER?

    我正在编写一个实体框架 LINQ 查询 其中我想将字符串解析为 UNIQUEIDENTIFIER 又名 GUID 作为WHERE clause public IEnumerable
  • 尝试将 Asp.Net Memebership 数据库部署到 SQL Azure

    我一直在尝试让 ASP net 会员服务提供商与托管在 SQL Azure 中的其余数据库配合使用 我已针对数据库运行适当的 SQL Azure 特定脚本来进行设置 这些脚本可从 Microsoft 获取 http archive msdn
  • TSQL如何在xml列中选择具有技能的员工

    在如下所示的表架构中 CREATE TABLE dbo Employee EmployeeId uniqueidentifier NOT NULL Name nvarchar 50 NOT NULL Location nvarchar 50
  • 无论如何要解密加密的sql server存储过程吗?

    我有几个 ms sql server 2000 存储过程 很久以前就被前雇员加密了 一切都很好 直到我们需要稍微改变一下 有什么方法可以检索源代码吗 或者重写是唯一的选择 多谢 或者免费 谷歌是你的朋友 http searchsqlserv
  • 从 SQL Server 读取十进制值时出现溢出异常

    我想知道这是一个错误还是我做错了什么 我正在加载值SqlDataReader来自 SQL Server 2008 数据库 但在某些情况下 它无法将 SQL 值转换为 net 值 NET 4 0 我已将其追溯到一个测试用例 它演示了实际问题
  • 从每个子集中选择最大值

    我在这里敲头 我觉得自己很愚蠢 因为我确信我以前做过类似的事情 但我一辈子都不记得是怎么做的 我想那一天 gt 假设我有以下数据 gt 和一个返回此数据的查询 gt 但我想要这个 ID FirstID ID FirstID ID First
  • 创建具有动态列数的临时表

    我正在尝试创建一个具有动态列数的临时表 set cmd SELECT into temp3 from select from sometable x pivot max buildrate for name in columns as y
  • 在 SQL Server 中通过标准差消除异常值

    我试图通过标准差消除 SQL Server 2008 中的异常值 我只想要特定列中包含该列平均值的 1 标准差范围内的值的记录 我怎样才能做到这一点 如果您假设事件呈钟形曲线分布 则只有 68 的值与平均值相差 1 个标准差以内 95 的值
  • SQL Server Management Studio v18 的命令行参数登录

    使用 SQL Server 身份验证时是否仍然可以从命令行打开 SQL Server Management Studio v18 根据微软的发行说明 由于安全风险 他们删除了 P 命令行参数 因此 可以从命令行使用 SQL Server 身
  • 批量插入不适用于 NULL 数据

    当我从 CSV 文件将批量数据插入到表中时 它不起作用 显示错误 第 2 行第 9 列的批量加载数据转换错误 类型不匹配或指定代码页的字符无效 csv 文件中的第 9 列值为空 我该如何处理这个问题 根据这些信息 我认为目标表的特定字段被定
  • SQL Server中的列级与表级约束?

    A 列级 GO CREATE TABLE Products ProductID INT CONSTRAINT pk products pid PRIMARY KEY ProductName VARCHAR 25 GO b 表层 CREATE
  • 如何使用 SSIS 将多个 Access 数据库导入到 SQL Server

    我有一个文件夹 其中包含 300 多个 Access 数据库 由我无法控制的程序编写 它们都有相同的结构 只是一张表 我正在将数据导入到 SQL Server 2005 中的表中 使用导入向导效果很好 但它一次只能用于一个 Access 数
  • Sql Server 的夏令时

    我们正在使用一个以 C Unix 格式存储日期的旧应用程序 C 时间基本上是自 1970 年 1 月 1 日以来的秒数 日期以整数形式存储在 SQL Server 数据库中 我正在为使用这些日期的报告编写视图 到目前为止 我正在使用以下命令
  • 错误:不支持的 PIVOT 列类型:文本

    我正在尝试执行 PIVOT 但出现错误 我正在尝试查看哪些患者接受了多次间隔治疗 该列是文本类型 我尝试在查询中将列类型转换为 VARCHAR MAX 但仍然收到错误 这是我的代码 SELECT patientname IntervalNa
  • SQL 查询将文本数据存储在 Varbinary(max) 中

    有没有办法让 varbinary 在 SQL Server 中接受文本数据 这是我的情况 我有相当大量的 XML 我计划以 压缩 格式存储它们 这意味着 Varbinary 但是 当我进行调试时 我希望能够翻转配置开关并以纯文本形式存储 以

随机推荐