[英]How can I cascade delete with one-to-many relation in typeORM?
我在 OneToMany 關系中有組和聯系人實體。 我在組內添加聯系人。 當我想刪除時,我希望數據庫的兩邊都被刪除。 但只有組表被刪除。
這是contact.entity
這是一對多的關系:
這里是group.entity
我在服務中寫的function如下:
我通過搜索嘗試了許多解決方案。 在兩邊添加級聯,我知道這是不對的,但我想嘗試,但我無法讓它工作。
你用錯了方法。 如果你將 hover 軟刪除 function,你會看到它需要像這樣的道具:( (method) Repository<Group>.softDelete(criteria: string | number | Date | ObjectID | string[] | FindConditions<Group> | number[] | Date[] | ObjectID[]
這意味着您必須像這樣使用它:
getRepository(Group).softDelete({ id: groupId})
getRepository(Group).update({id: groupId}, {name: "new name"})
不要硬編碼可以由數據庫本身完成的事情。 如果您希望在刪除組時刪除該組的所有聯系人,請使用外鍵
在刪除級聯
例如:
create table group1(
id serial primary key,
name varchar
);
create table contact(
id serial primary key,
name varchar,
group_id integer references group1 (id) on delete cascade
);
您正在執行 softDelete,因此您應該向父實體添加一個{ cascade: ['soft-delete'] }
選項,在這種情況下是Group
是:
@OneToMany(Contact, (contact) => contact.group, { cascade: ['soft-delete'] })
contact: Contact[]
以防萬一, ON DELETE
約束是基於數據庫級別的,另一方面, soft-delete
是基於代碼級別的,因此 ORM 將觸發UPDATE
以更改實體的deleted_at
列中的時間。
考慮到上述情況, cascade
選項將配置 ORM 在父實體中完成更改時的行為方式(基於代碼級別), onDelete
選項將配置表中的約束(基於數據庫級別)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.