TypeORM,manyToMany我无法保存数组对象及其与一个请求的关系

问题描述

我有两个不同的突变,已将坐标保存在数据库 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;
    }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...