如何解决从对象数组创建 1-n
我想知道是否有人可以帮我解决这个问题。我花了一段时间在网上搜索,但找不到任何东西。我只是在学习编程,我被卡住了。
我正在尝试创建 1-n 关系。 1 是业务,n 是来自对象数组的数据。
我想:
- 创建业务
- 创建交易实体并将它们链接到业务。 TradingEntity.name 来自 BN_NAME,TradingEntity.Status 来自 BN_STATUS
我正在使用 NestJS,但在打字稿方面的任何帮助都会很棒,因为我会尝试从中学习。
感谢您的帮助。
-保罗
我的架构是:
model Business {
id Int @id @default(autoincrement())
BN_ABN Int? @unique
tradingEntities TradingEntity[]
}
model TradingEntity {
id Int @id @default(autoincrement())
Business Business @relation(fields: [BusinessId],references: [id])
BusinessId Int
Name String // BN_NAME from array of objects
Status String // BN_STATUS from array of objects
}
这是对象数组。
[
{
_id: 1812602,REGISTER_NAME: 'BUSINESS NAMES',BN_NAME: 'Synergy Evolved',BN_STATUS: 'Registered',BN_REG_DT: '08/09/2012',BN_CANCEL_DT: null,BN_RENEW_DT: '08/09/2021',BN_STATE_NUM: null,BN_STATE_OF_REG: null,BN_ABN: '48166724204',rank: 0.0573088
},{
_id: 2199676,BN_NAME: 'VALUERACK',BN_REG_DT: '11/04/2012',BN_RENEW_DT: '11/04/2015',BN_STATE_NUM: 'B2460084Y',BN_STATE_OF_REG: 'VIC',rank: 0.0573088
}
]
解决方法
您可以使用对象数组通过单个 Prisma 查询创建 Business
和 TradingEntity
记录。为此,您需要使用 connecOrCreate API。
这是将对象数组中的数据插入数据库的解决方案。
// Assuming executing inside an async function
// Assuming array of objects is stored in a variable called "businessData"
for (const data of businessData) {
const tradingEntity = await prisma.tradingEntity.create({
data: {
Name: data.BN_NAME,Status: data.BN_STATUS,Business: {
connectOrCreate: {
/*
* Will connect to an existing "Business" record with matching BN_ABN if it exists,* OR
* Will create a new "Business" record if there is no existing record with a matching BN_ABN.
*/
where: {
BN_ABN: parseInt(data.BN_ABN) //BN_ABN is a string in the object,so converted to Int to comply with Prisma Schema.
},create: {
BN_ABN: parseInt(data.BN_ABN)
}
}
}
}
});
}
给定您提供的对象数组,上面的代码片段将
- 创建两个
TradingEntity
记录,名称为“Synergy Evolved”和“VALUERACK”。 - 创建一个
Business
记录,BN_ABN 为 922083948。
或者,您应该考虑将 TradingEntity
中的字段名称从 PascalCase 更改为 camelCase。这更符合 Prisma 文档中建议的 naming conventions。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。