使用TypeORM更新ManyToMany关系

时间:2020-03-14 20:20:19

标签: typeorm

我是TypeORM的新手,在更新实体时遇到问题。

我有一个要用于初始化数据库的静态类别列表。 我有一个食谱表,每个食谱可以有多个类别,但是只有“有效”类别(无法添加新类别)

这是我到目前为止尝试过的:

收件人实体:

@Entity()
export class Recipe {

    @PrimaryGeneratedColumn("uuid")
    id: string;

    @Column()
    title: string;


    @ManyToMany(type => Category, {eager: true, cascade: ["update"]})
    @JoinTable()
    categories: Category[];

}

类别实体:

@Entity()
class Category {
    @PrimaryGeneratedColumn()
    public id: string;

    @Column()
    public name: string;
}

收件人控制器:

    static async update(request: Request, response: Response, next: NextFunction) {
        try {
            const recipe = await getRepository(Recipe).findOne(request.params.id);

            if (!recipe) {
                return response.status(404).json({message: 'The specified recipe could not be found.'});
            }

            /**
             * update categories
             */
            if (request.body.categories) {
                await getRepository(Recipe)
                    .createQueryBuilder()
                    .relation(Recipe, 'categories')
                    .of(recipe)
                    .addAndRemove(request.body.categories, recipe.categories);

                delete request.body.categories;
            }

            await getRepository(Recipe).merge(recipe, request.body);

            await getRepository(Recipe).save(recipe);
            const updatedRecipe = await getRepository(Recipe).findOne(request.params.id);
            response.json(updatedRecipe);
        } catch (e) {
            next(e);
        }
    }

我尝试了很多事情,但无法使它正常工作... 最终的办法是传入PUT /api/recipe/:id的{​​{1}}配方方案,并使用相关类别更新配方。

0 个答案:

没有答案