fireproofsocks

fireproofsocks

Is it possible to use an Ecto.Multi to do an insert and an insert_all where the insert_all needs the primary key resulting from the first insert? E.g. creating a parent record with numerous child records in one transaction.

The insert option can use a 3rd argument of changeset_or_struct_or_fun, but the insert_all function doesn’t allow for a function… so there doesn’t appear to be a good way to capture the primary key that gets generated.

I can wrap the steps inside of a Repo.transaction callback function like this:

Repo.transaction fn ->
  with {:ok, parent} <- ParentContext.create(params),
       {:ok, _children} <- create_children(parent, params)
    do

  else
    {:error, e} -> Repo.rollback(e)
  end
end

but I was curious if the multi supported it. Thanks!

Showing Posts 1 to 6

axelson

axelson

Scenic Core Team

Yeah you can using Multi.merge/2 (or Multi.run). It looks something like this:

Multi.new()
|> Multi.insert(:user, User.changeset(%User{}, params))
|> Multi.merge(fn %{user: user} ->
  # That is the inserted user from the first part of the multi
  Multi.new()
  |> Multi.insert_all(:posts, build_insert_all_posts_changeset(user))
end)
|> Repo.transaction()
12
Post #1
alxvallejo

alxvallejo

What is this function??

axelson

axelson

Scenic Core Team

It is a function that you would need to define that returns a list of post changesets (and is suitable for insert_all so it might have to set inserted_at and updated_at).

ca1989

ca1989

How can you use insert_all with a list of changeset?

LostKobrakai

LostKobrakai

You can’t directly. Repo.*_all are lower level APIs, which don’t support many schema or changeset features. You can map things from changeset to values for insert_all manually if you don’t need any of the not really supported parts.

ca1989

ca1989

Thanks for the clarification.

So, is there any example on how to insert a bunch of “children” in a Multi with validation?

Will open a new thread though. Don’t want to necrobump.

— All posts loaded —

Where Next? Top

Trending in Questions Top

katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
apz
I’m new to elixir and just tried to install the elixirLS extension for VScode(ium) and it is throwing some errors that I would like help ...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews