【问题标题】:delete associated records in Supabase删除 Supabase 中的关联记录
【发布时间】:2021-11-14 00:17:32
【问题描述】:

使用 Supabase 时,是否有一种干净/简单的方法可以删除所有关联的记录以及一个项目?假设我有帖子,一个帖子可以有很多评论。当我删除帖子时,我也想删除评论。

基本上类似于 Rails 中的dependend: :destroy

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.

【问题讨论】:

    标签: javascript sql supabase supabase-database


    【解决方案1】:

    是的,有!

    魔法不是在您删除数据时发生,而是在您第一次创建 cmets 表时发生。它也不是 Supabase 功能,而是 postgres 功能。

    当你创建一个外键约束时,你可以设置一个delete cascade 选项来告诉表删除任何相关数据。

    例如,您可以像这样创建一个 cmets 表:

    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
    );
    

    注意post_iduser_id 定义中的delete cascade 关键字。如果相关帖子或用户被删除,添加这些将删除评论条目。

    目前,在 Supabase UI 中无法使用delete cascade 选项创建列,因此您必须使用 SQL 创建此类表。

    另外,如果您已经有一个表并且想要添加此delete cascade 选项,则必须删除外键约束并使用delete cascade 选项重新添加它。您可以了解更多关于如何将 delete cascade 添加到现有表 here 的信息,但如果您的应用程序未投入生产,则删除该表并从头开始重新创建它可能会更容易!

    【讨论】:

      猜你喜欢
      • 2011-04-29
      • 1970-01-01
      • 2017-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多