问题描述
我有两个不同的突变,已将坐标保存在数据库 createCoordinate , createCoordinateMultiple 中。首先,我可以轻松记录单个对象并获得其关系的响应。
但是我无法正确尝试为多种操作编写突变。你能帮我吗?
@Authorized('ADMIN')
@Mutation(() => Coordinate)
async createCoordinate(
@Arg('coordinate') input: CreateCoordinateInput
): Promise<Coordinate> {
const coordinate = new Coordinate();
coordinate.lat = input.lat;
coordinate.lng = input.lng;
const insects = input.insectList.map(id => ({ id })) as Insect[];
coordinate.insects = Promise.resolve(insects);
const response = await this.coordinateRepo.save(coordinate);
return response;
}
@Authorized('ADMIN')
@Mutation(() => [Coordinate])
async createCoordinateMultiple(
@Arg('coordinates',() => [CreateCoordinateInput]) coordinates: CreateCoordinateInput[]
): Promise<Coordinate[]> {
const response = await this.coordinateRepo.save(coordinates);
const data = response.map(coordinate => ({
id: coordinate.id,lat: coordinate.lat,lng: coordinate.lng,title: coordinate.title,description: coordinate.description,sourceId: coordinate.sourceId,image: coordinate.image,insects: coordinate.insectList.map(id => ({
insectId: id,coordinateId: coordinate.id,})),}));
console.log(data);
return response;
}
console.log(数据)输出;
[
{
id: 'c2f6b8f3-3d1a-4497-a492-ace7d58d217e',lat: 36.7812360767751,lng: 34.5795541012578,title: 'B - konum',description: 'B - bilgi',sourceId: '7c94ce2d-e5a6-4a07-a272-369b3b34a61b',image: '1.jpg',insects: [ [Object],[Object] ]
},{
id: 'b555f620-e9fd-4fdf-81ef-f355cb151969',lat: 36.7819407011663,lng: 34.580841561585,title: 'D - konum',description: 'D - bilgi',image: '2.jpg',[Object] ]
}
]
https://github.com/typeorm/typeorm/issues/6713
解决方法
我找到了另一个解决方案。虽然我不知道干净使用。至少在我等待 TypeORM 开发人员的回答时,它现在才有效。
我正在为坐标和昆虫关系创建另一个实体。
然后保存坐标资产。我将返回的答案中的坐标ID与以后需要写入数组对象的昆虫ID相匹配。
@Authorized('ADMIN')
@Mutation(() => [Coordinate])
async createCoordinateMultiple(
@Arg('createCoordinateInputs',() => [CreateCoordinateInput]) inputs: CreateCoordinateInput[]
): Promise<Coordinate[]> {
const response = await this.coordinateRepo.save(inputs);
const coordinatesInsects = [];
response.forEach(coordinate => {
coordinate.insectList.forEach(insect => {
coordinatesInsects.push({ coordinateId: coordinate.id,insectId: insect })
})
});
await this.coordinateInsectRepo.save(coordinatesInsects);
return response;
}