How To Delete Many-To-Many Relation In Elixir Ecto — Tentamen Software Testing Blog

Karlo Smid
1 min readSep 14, 2020

--

Elixir Ecto Many To Many Relation

TL;DR

Based on this excellent blog post, Many to many relationships with Ecto by Nuno Marinho, we successfully implemented many-to-many relations in our application. However, we needed a feature that required removing (deleting) many-to-many relations without deleting entities involved in this relation.

Deleting Many-To-Many Relation in Elixir Ecto

In Nuno post, you can find four steps on how to do proper many-to-many relation between Projects and Users using Elixir Ecto powers. However, one step is missing, how to remove the relation between Projects and Users.

The Wrong Way

Our first implementation was to do:

user
|> User.changeset_update_projects(projects)
|> Repo.update()

but that also deleted a User record.

Then we found this excellent advice on the Elixir forum:

Repo.delete/2 expects a changeset_or_struct as the first argument. It looks like you’re piping an #Ecto.Query ( ie.queryable) into it. I believe delete_all/2 66 is what you’re looking for.

without the query implementation.

The Query For Deleting Many-To-Many Relation In Elixir Ecto

https://gist.github.com/karlosmid/c4b6abb224efa563592d56dc00d5efec

Originally published at https://blog.tentamen.eu on September 14, 2020.

--

--

Karlo Smid
Karlo Smid

Written by Karlo Smid

Founder of Tentamen, software testing agency.

Responses (1)