Al usar Supabase, ¿existe una forma limpia/sencilla de eliminar todos los registros asociados junto con un artículo? Digamos que tengo Publicaciones y una Publicación puede tener muchos Comentarios. Cuando elimino la publicación, también quiero eliminar los comentarios.
Algo así como dependend: :destroy en Rails, básicamente.
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.¡Sí hay!
La magia no ocurre cuando elimina los datos, sino cuando crea por primera vez su tabla de comentarios. Tampoco es una función de Supabase, sino una función de postgres.
Cuando crea una restricción de clave externa, puede establecer una opción de delete cascade para indicarle a la tabla que elimine cualquier dato relacionado.
Por ejemplo, puede crear una tabla de comentarios como esta:
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 ); Observe la palabra clave de delete cascade en la definición post_id y user_id . Al agregarlos, se eliminará la entrada del comentario si se elimina la publicación o el usuario relacionados.
Actualmente, no hay forma de crear una columna con la opción de delete cascade en la interfaz de usuario de Supabase, por lo que deberá crear dicha tabla con SQL.
Además, si ya tiene una tabla y desea agregar esta opción de delete cascade , deberá eliminar las restricciones de clave externa y volver a agregarla con la opción de delete cascade . Puede obtener más información sobre cómo agregar una delete cascade a una tabla existente aquí , pero si su aplicación no está en producción, ¡podría ser más fácil simplemente eliminar la tabla y volver a crearla desde cero!