node.js - 使用 Entity Schema 的 TypeORM 一对多关系

标签 node.js typeorm node.js-typeorm

我有两个实体项目和订单。我想在项目中有一对多订单,在订单中有多对一项目。

多对一端工作正常。

当我尝试在项目实体中添加一对多并尝试获取所有内容时,出现以下错误:

"Cannot read property 'joinColumns' of undefined"

项目实体

const { EntitySchema } = require('typeorm');
const { BaseRelations, BaseColumns } = require('../BaseEntity');

module.exports = new EntitySchema({
  name: 'Project',    
  columns: {
    ...BaseColumns,
    name: {
      type: 'varchar',
    }
  },
  relations: {
    ...BaseRelations,
    orders: {
      type: 'one-to-many',
      target: 'Order',
      cascade: true,
    },
  },
});

订单实体

const { EntitySchema } = require('typeorm');

module.exports = new EntitySchema({
  name: 'Order',
  columns: {
    id: {
      primary: true,
      type: 'int',
      generated: true,
    },
    name: {
      type: 'varchar',
      name: 'name',
    },
  },
  relations: {
    project: {
      type: 'many-to-one',
      target: 'Project',
      joinColumn: {
        name: 'project_id',
      },
    }
  },
});

最佳答案

想通了。对于面临类似问题的任何人。您需要在两个实体模式中定义 inverseSideinverseSide 值应该是在关系另一端的实体中定义的关系名称。

因此,对于我上面的实体,我需要进行以下更改:

项目实体:

const { EntitySchema } = require('typeorm');
const { BaseRelations, BaseColumns } = require('../BaseEntity');

module.exports = new EntitySchema({
  name: 'Project',    
  columns: {
    ...BaseColumns,
    name: {
      type: 'varchar',
    }
  },
  relations: {
    ...BaseRelations,
    orders: {
      type: 'one-to-many',
      target: 'Order',
      cascade: true,
      inverseSide: 'project' // Note that this is relation name, not the entity name
    },
  },
});

订单实体:

const { EntitySchema } = require('typeorm');

module.exports = new EntitySchema({
  name: 'Order',
  columns: {
    id: {
      primary: true,
      type: 'int',
      generated: true,
    },
    name: {
      type: 'varchar',
      name: 'name',
    },
  },
  relations: {
    project: {
      type: 'many-to-one',
      target: 'Project',
      joinColumn: {
        name: 'project_id',
      },
      inverseSide: 'orders' // Note that this is the relation name in project entity, no the entity name Order
    }
  },
});

关于node.js - 使用 Entity Schema 的 TypeORM 一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69019803/

相关文章:

node.js - 如何在没有文件写入权限的情况下收集一个可能包含它自己的异步调用的方法?

node.js - 错误: Cannot query across one-to-many for property TypeORM

postgresql - 将 Date.now() 保存到时间戳列但获取超出范围的日期/时间字段值

javascript - 如何在 NodeJS 中使用相对路径(参数)获取文件

node.js - 检索链接条目的字段 - Contentful

Nestjs typeorm 多对多按计数排序

node.js - 为什么TypeORM需要提供OneToMany的反面,而不需要提供ManyToOne的反面?

sql - 为自引用表设置一对多关系

node.js - Typeorm 急切加载不适用于一对一关系

javascript - 通过 Telegram Bot 与用户对话共享内联消息链接