gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:15:19 25 4
gpt4 key购买 nike

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

多对一端工作正常。

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

"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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com