Har*_*ood 4 node.js typeorm node.js-typeorm
我有两个实体项目和订单。我想在项目中拥有一对多订单,在订单中拥有多对一项目。
多对一方面工作正常。
当我尝试在项目实体中添加一对多并尝试获取所有实体时,出现以下错误:
"Cannot read property 'joinColumns' of undefined"
Run Code Online (Sandbox Code Playgroud)
项目单位
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,
},
},
});
Run Code Online (Sandbox Code Playgroud)
订单实体
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',
},
}
},
});
Run Code Online (Sandbox Code Playgroud)
弄清楚了。对于任何面临类似问题的人。您需要inverseSide在两个实体模式中定义。inverseSidevalue 应该是关系另一端实体中定义的关系名称。
因此,对于上面的实体,我需要进行以下更改:
项目单位:
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
},
},
});
Run Code Online (Sandbox Code Playgroud)
订单实体:
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
}
},
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3972 次 |
| 最近记录: |