Typescript 如何正确创建具有多个关系的注册表?
我正在尝试保存一个有许多类别的产品。同时,一个类别可以有许多产品。因此,我认为最好的解决方案是使用多个关系对数据进行建模 当我尝试创建一个新产品时,出现了一个错误,说不可能使用空值插入一个新类别。最疯狂的是,我不需要创建新的类别,而是要将现有的类别分配给新产品 这是console返回的SQL消息:Typescript 如何正确创建具有多个关系的注册表?,typescript,sqlite,typeorm,Typescript,Sqlite,Typeorm,我正在尝试保存一个有许多类别的产品。同时,一个类别可以有许多产品。因此,我认为最好的解决方案是使用多个关系对数据进行建模 当我尝试创建一个新产品时,出现了一个错误,说不可能使用空值插入一个新类别。最疯狂的是,我不需要创建新的类别,而是要将现有的类别分配给新产品 这是console返回的SQL消息: SQLITE\u约束:非空约束失败:category.name', errno:19, 代码:“SQLITE_约束”, 名称:“QueryFailedError”, 查询:'插入到“类别”(“id”、
SQLITE\u约束:非空约束失败:category.name',
errno:19,
代码:“SQLITE_约束”,
名称:“QueryFailedError”,
查询:'插入到“类别”(“id”、“父项id”、“名称”、“描述”、“创建数据”、“更新数据”)值(NULL、NULL、NULL、NULL、datetime(\'now\')、datetime(\'now\'))
根据我推断我的代码必须与next类似:
Product.ts
@Entity()
@唯一([“代码”])
出口类产品{
@PrimaryGeneratedColumn()
id:编号;
@纵队({
长度:20
})
代码:字符串;
@纵队({
长度:100
})
名称:字符串;
@第()列
描述:字符串;
@第()列
股票:编号;
@纵队({
类型:“真实”
})
价格:数量;
@第()列
公共价格:布尔值;
@第()列
公共:布尔;
@许多(类型=>Category,Category=>Category.products{
瀑布:对
})
@JoinTable()
类别:类别【】;;
}
Category.ts
@Entity()
出口类别{
@PrimaryGeneratedColumn()
id:编号;
@列({nullable:true})
父id:编号;
@第()列
@IsNotEmpty()
名称:字符串;
@第()列
description?:字符串;
@第()列
@CreateDateColumn()
createdAt:日期;
@第()列
@UpdateDateColumn()
更新日期:日期;
@ManyToMany(类型=>Product,产品=>Product.categories)
产品:产品【】;;
}
ProductController.ts(创建方法)
static create=async(请求:请求,响应:响应)=>{
const{categories,…data}=req.body
const categoryRepository=getRepository(Category);
const productRepository=getRepository(产品);
常数猫=[]
for(类别的常量id){
const cat=wait categoryRepository.find(id)
猫。推(猫)
}
const product=新产品();
for(数据中的常量索引){
产品[索引]=数据[索引]
}
product.categories=猫
试一试{
等待productRepository.保存(产品);
res.send(“产品成功创建”);
}捕捉(错误){
console.log(错误)
res.status(409).send('产品创建错误');
}
}
这是我用来通过Postman测试我的应用程序的JSON对象:
{
"code": "1234",
"name": "TESTING PRODUCT CREATION",
"description": "Product sended through postman",
"stock": "99",
"price": "255.88",
"public_price": true,
"public": true,
"categories": [1]
}
替换
wait categoryRepository.find(id)
与
await categoryRepository.findOne(id)
find
将返回数组中的项