Angular 从API提供一对多的正确方法?

Angular 从API提供一对多的正确方法?,angular,rest,api,nestjs,Angular,Rest,Api,Nestjs,我已经尝试过搜索互联网络,并且承认我可能不知道找到解决方案所需的正确术语。我可以参考阅读材料,但我不确定从哪里开始 对于堆栈,我使用Angular+NestJS。计划使用Postgres作为数据库集成TypeForm 我有以下实体,其中一个预算有一个项目,而一个项目可能有多个预算: export interface Budget { id: number; description: string; project_id: number; budget_type: string;

我已经尝试过搜索互联网络,并且承认我可能不知道找到解决方案所需的正确术语。我可以参考阅读材料,但我不确定从哪里开始

对于堆栈,我使用Angular+NestJS。计划使用Postgres作为数据库集成TypeForm

我有以下实体,其中一个预算有一个项目,而一个项目可能有多个预算:

export interface Budget {
  id: number;
  description: string;
  project_id: number;
  budget_type: string;
  budget_status: string;
}

export interface Project {
  id: number;
  project_number: string;
  project_title: string;
  project_status: string;
  client: string;
}
对于这种情况,我想在一个角度材质表中显示预算列表,并在表中显示“项目编号”,而不是“项目id”

  • 我是否应该修改预算接口定义以返回其项目
  • 我应该让应用程序通过API请求项目资源吗
  • 一般来说,对于包含对具有id的其他实体的引用的实体,我应该将这些实体包括在来自API的响应中,还是将它们嵌套到响应中

    我是否应该修改预算接口定义以返回其项目? 问题:对于嵌套程度更高的对象,可能会有比实际需要更多的数据

    我应该让应用程序通过API请求项目资源吗? 担心:如果我有100个预算,那么在应用程序等待加载表时,这将是对API的额外100个调用


    我不懂这个数组。您问“我是否应该修改预算接口定义以返回项目数组?”但“预算有一个项目,而项目可能有多个预算”

    您不应该将项目数组放入预算中。此外,由于每个预算只有一个项目。。。我看不出它是一个数组

    是一些阅读,但你想列出你的整个预算表。您需要来自另一个表(而不仅仅是ID)的数据,因此可以进行连接。是连接类型上的StackOverflow post。下面是一个获取SQL查询的项目编号的示例:

    SELECT Budget.id, Budget.description, Project.project_number
    FROM Budget
    LEFT JOIN Project ON Budget.project_id = Budget.id
    

    因为这可以在SQL中轻松完成,所以不需要更改模式。在使用SQL时,您应该将一对多优先于多对多,并且应该使用“多”中的键指向“一”。

    您可以简单地将项目编号也包括在预算界面中。使用项目编号显示在表中,使用项目id引用项目实体。这样可以避免额外的读取复杂性。原始问题中提供的项目/预算关系只是一个简单的示例。我打算向实体添加更多属性。将显示在列表中的某些对象具有多个一对多关系。感谢您的回复。SQL不是问题所在。我的问题更多的是关于API的实现。我是否发送嵌套在预算中的项目。。或者,在应用程序收到预算后,我是否再次点击API以获取项目。同样,你是对的。我把描述弄错了。我在想反过来。如果我要从API请求项目。。我是将其他实体的“id”发送到应用程序,还是将这些实体包含在响应中。
    {
      "budgets": [
        {
          "id": 1,
          "description": "platea dictumst",
          "project_id": 3,
          "budget_type": "Change Order",
          "budget_status": "Approved"
        },
        {
          "id": 2,
          "description": "et commodo vulputate justo in blandit",
          "project_id": 78,
          "budget_type": "Original",
          "budget_status": "Lost"
        }
      ]
    }
    
    SELECT Budget.id, Budget.description, Project.project_number
    FROM Budget
    LEFT JOIN Project ON Budget.project_id = Budget.id