如何通过Ecto Multi从先前插入的表键中检索ID

问题描述 投票:0回答:1

我想通过Ecto Multi从先前插入的表主键中检索ID。

首先,我插入A主表。那么B明细表需要A.id。我尝试了以下代码。

Multi.new()
  |> Multi.insert(:insert, main)
  |> Multi.insert_all(:insert_all, B, details)
  |> Repo.transaction()

但是我不知道如何检索插入表B的A.id。我该怎么办?

elixir phoenix-framework ecto
1个回答
0
投票

我认为您可以使用Multi.merge在第二个多重中使用第一个多重的结果。

这是文档中的示例:

multi =
  Ecto.Multi.new()
  |> Ecto.Multi.insert(:post, %Post{title: "first"})

multi
|> Ecto.Multi.merge(fn %{post: post} ->
  # Here, post is the Post inserted in the first multi.
  Ecto.Multi.new()
  |> Ecto.Multi.insert(:comment, Ecto.build_assoc(post, :comments))
end)
|> MyApp.Repo.transaction()

更新:我已经添加了有关在第一个多重中创建的post(您的A模型)的注释。您可以使用post.id并将其分配给相关注释(您的B模型)。

© www.soinside.com 2019 - 2024. All rights reserved.