簡體   English   中英

如何在 typeORM 中使用一對多關系級聯刪除?

[英]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})

與更新 function 相同: 更新

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM