Как я могу правильно обновить вложенные свойства с помощью typeorm и type-graphql - PullRequest
0 голосов
/ 23 января 2020

У меня есть родительский (Pricelist) объект с несколькими вложенными дочерними объектами (Items). Я пытаюсь обновить все через мутацию в моем pricelistResolver. Все конечные точки в этом преобразователе работают правильно, за исключением updatePricelist.

. Когда я пытаюсь вызвать мутацию, я получаю следующую ошибку "No entity column "items" was found.".

Когда я проверяю элементы с помощью:

const pricelist = await Pricelist.findOneOrFail({ id });
    console.log(pricelist?.items);

Отображаются все элементы в прайс-листе

При удалении items из области видимости, вот так;

Pricelist.update({ id }, {name: input.name, description: input.description});

все работает как надо, но это не обновляет элементы ..

Может кто-нибудь показать мне правильное направление?

Прейскурант цен

@Resolver()
export class PricelistResolver {

  // GET ALL PRICELISTS
  @Query(() => [Pricelist])
  async getPricelists () {
    return await Pricelist.find();
  }

  // GET SINGLE PRICELIST
  @Query(() => Pricelist)
  async getPricelistById (@Arg('id') id: string) {
    return await Pricelist.findOne({ id });
  }

  // POST NEW PRICELIST
  @Mutation(() => Boolean)
  async addPricelist (@Arg("input") input: newPricelistInput) {
    await Pricelist.create(input).save();
    return true;
  }

  // UPDATE PRICELIST
  @Mutation(() => Boolean)
  async updatePricelist (@Arg('id') id: string, @Arg('input') input: newPricelistInput) {
    await Pricelist.update({ id }, input);
    return true;
  }
}

newPricelistInput

@InputType()
export class newPricelistInput {

  @Field()
  name: string;

  @Field({ nullable: true })
  @Length(0, 255)
  description: string;

  @Field(() => [newItemInput])
  items: newItemInput[];
}

BaseClass

@ObjectType()
export class BaseClass extends BaseEntity {

  @PrimaryGeneratedColumn('uuid')
  @Field()
  id: string;

  @Column({ nullable: true, default: Date.now() })
  @Field({ defaultValue: Date.now() })
  editDate: number;

  @Column({ nullable: true, default: Date.now() })
  @Field({ defaultValue: Date.now() })
  creationDate: number;
}

Parent

@Entity('Pricelists')
@ObjectType()
export class Pricelist extends BaseClass {

  @Column()
  @Field()
  name: string;

  @Column()
  @Field()
  description: string;

  @OneToMany(() => Item, item => item.Pricelist, { eager: true, cascade: true, lazy: true })
  @Field(() => [Item], { nullable: true })
  items: Item[];
}

Child

@Entity('Items')
@ObjectType()
export class Item extends BaseClass {

  @Column()
  @Field()
  value: string;

  @ManyToOne(() => ParentGroup, parentGroup => parentGroup.firstChildGroup, { cascade: true, lazy: true })
  @Field(() => ParentGroup)
  parentGroup: ParentGroup;

  @ManyToOne(() => FirstChildGroup, firstChildGroup => firstChildGroup.parentGroup, { cascade: true, lazy: true })
  @Field(() => FirstChildGroup)
  firstChildGroup: FirstChildGroup;

  @ManyToOne(() => SecondChildGroup, secondChildGroup => secondChildGroup.firstChildGroup, { cascade: true, lazy: true })
  @Field(() => SecondChildGroup)
  secondChildGroup: SecondChildGroup;

  @ManyToOne(() => Pricelist, pricelist => pricelist.items)
  @Field(() => ID)
  Pricelist: Pricelist;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...