javascript - 删除 Supabase 中的关联记录
问题描述
使用 Supabase 时,是否有一种干净/简单的方法可以删除所有关联记录以及一个项目?假设我有帖子,一个帖子可以有很多评论。当我删除帖子时,我也想删除评论。
基本上就像dependend: :destroy
在 Rails 中的东西。
const { data, error } = await supabase
.from('posts')
.delete()
.match({ id: 123 })
.options({ destroyDependent: true }) // set some option that tells Supabase to delete all associated records as well.
解决方案
就在这里!
魔法不是在您删除数据时发生,而是在您第一次创建评论表时发生。它也不是 Supabase 功能,而是 postgres 功能。
当您创建外键约束时,您可以设置一个delete cascade
选项来告诉表删除任何相关数据。
例如,您可以像这样创建一个评论表:
create table if not exists public.comments (
id uuid not null primary key DEFAULT uuid_generate_v4 (),
post_id uuid references public.posts on delete cascade not null,
user_id uuid references public.users on delete cascade not null,
created_at timestamp with time zone default timezone('utc' :: text, now()) not null,
text varchar(320) not null
);
注意delete cascade
关键字 onpost_id
和user_id
定义。如果相关帖子或用户被删除,添加这些将删除评论条目。
目前,没有办法delete cascade
在 Supabase UI 中创建带有选项的列,因此您必须使用 SQL 创建这样的表。
此外,如果您已经有一个表并想添加此选项,则必须删除外键约束并使用选项delete cascade
重新添加它。您可以在此处delete cascade
了解有关如何添加delete cascade
到现有表的更多信息,但如果您的应用程序未投入生产,则删除该表并从头开始重新创建它可能会更容易!
推荐阅读
- windows - 在 QT 程序中全局强制 QFileDialog::DontUseNativeDialog
- c++ - 作为参数引用
- java - 从 ArrayList (java) 中获取元素
- excel - 比较值并返回excel
- 3d - 具有自己的“特征”实现的 CGAL 3D 凸壳包含内部点
- nginx - 如何使用 nginx 代理 RMI 调用
- laravel - Laravel Nova,更改搜索结果 HTML
- c# - Visual Studio Community 2017 - ASP.Net Web 应用程序(.NET Framework)模板损坏?
- python - 使用 ctypes 时出现分段错误
- python - 羽毛球预测/检测的数据校正技术