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

taj*_*iro 3 elixir ecto phoenix-framework

我想从之前由 Ecto Multi 插入的表主键中检索 id。

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

Multi.new()
  |> Multi.insert(:insert, main)
  |> Multi.insert_all(:insert_all, B, details)
  |> Repo.transaction()
Run Code Online (Sandbox Code Playgroud)

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

Eve*_*ett 6

您可以执行类似于以下示例的操作,该示例创建一条新User记录和一条新Email记录(其中记录通过外键email与父记录关联)。useruser_id

alias Ecto.Multi

user = get_user_params_from_form() # <-- or where-ever you are getting data
email = get_email_params_from_form()

Multi.new()
    |> Multi.insert(:user, User.changeset(%User{}, user))
    |> Multi.insert(
      :email,
      # Capture the id from the previous operation
      fn %{
           user: %User{
             id: user_id
           }
         } ->
        Email.changeset(%Email{user_id: user_id}, email)
      end
    )
Run Code Online (Sandbox Code Playgroud)

我认为这证明了您所描述的关系类型。希望能帮助到你!