我想通过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。我该怎么办?
我认为您可以使用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
模型)。