【发布时间】:2019-01-11 11:50:45
【问题描述】:
我目前正在尝试使用没有 Typescript 的 TypeORM 创建 Many To One 和 One to Many 关系。
我有以下实体设置:
./entity/proposal
module.exports = {
name: "Proposal",
columns: {
id: {
primary: true,
type: "int",
generated: true
},
name: {
type: "varchar",
length: 60
},
description: {
type: "varchar",
default: "",
length: 150
},
createdAt: {
createDate: true
},
updatedAt: {
updateDate: true
}
},
relations: {
sections: {
target: "Section",
type: "one-to-many",
treeParent: true,
cascade: true,
inverseSide: 'Proposal'
}
}
}
./entity/section
module.exports = {
name: "Section",
columns: {
id: {
primary: true,
type: "int",
generated: true
},
name: {
type: "varchar",
length: 60,
default: "New Section"
},
order: {
type: "int"
}
},
relations: {
proposal: {
target: "Proposal",
type: "many-to-one",
joinColumn: true,
nullable: false
}
}
}
从这里我创建了两个函数,一个用于插入提案,另一个用于创建使用级联功能插入行的模拟数据(根据此示例:https://github.com/typeorm/javascript-example)
./controller/createProposal.js
const getRepository = require('typeorm').getRepository
const createProposal = async proposal => {
let proposalRepository = getRepository("Proposal");
let result = await proposalRepository.save(proposal)
.then( savedProposal => {
return savedProposal
})
.catch( err => {
return {
message: "There was an issue saving the proposal",
err: err
}
});
return result
}
module.exports = createProposal
./controller/mockData.js
const createProposal = require('../proposal/createProposal')
const insertMockData = async () => {
let section1 = {
name: "Letter",
order: 1
}
let section2 = {
name: "Cloud",
order: 2
}
let proposal = {
name: "Cloud Proposal",
description: "Cloud Proposal",
sections: [
section1, section2
]
}
let result = await createProposal(proposal)
}
module.exports = insertMockData
将insertMockData() 函数与nullable: true 一起使用会产生以下结果:
=== Proposal Table ===
id name description
1 "Cloud Proposal" "Cloud Proposal"
=== Section Table ===
id name order proposalid
1 "Letter" 1 null
2 "Cloud" 2 null
我需要在部分表中显示proposalid,以便我可以通过proposalRepository.findOneOrFail({ id , relations: ['sections'] }) 急切地找到它。
我做错了什么?
【问题讨论】:
-
如果你也可以分享
createProposal功能,那就太好了。目前,我们还没有看到如何实际创建proposal对象。 -
@DavidWeinberg 嗨大卫,请查看底部代码块的第二个:)
标签: javascript typeorm