【问题标题】:How to build and insert a Many to Many association如何建立和插入多对多关联
【发布时间】:2016-07-15 06:38:46
【问题描述】:

如何使用 ecto 的新 many_to_many 功能在具有 _many_to_many_ 关系的两个表之间建立关联?

我有从组织到用户的一对多关系:

organization = Organization.shortcode_changeset(%Organization{}, org_field)
organization = organization |> Repo.insert!
organization |> build_assoc(:users)

这给了

%User{__meta__: #ecto.Schema.Metadata<:built, "users">,......}

user = Repo.preload(user, [:organization, :usergroup])

如何在用户和组之间使用 many_to_many 来做到这一点?

【问题讨论】:

    标签: elixir phoenix-framework ecto


    【解决方案1】:

    我是这样做的:

    user = user |> Repo.preload(:groups)
    %Group{} 
    |> Group.changeset(@group_field)
    |> Repo.insert!
    |> Repo.preload(:users)
    |> change
    |> put_assoc(:users, [user])
    |> Repo.update 
    

    只有在我找到这篇文章后我才能做到这一点,这使我能够继续: http://blog.roundingpegs.com/an-example-of-many-to-many-associations-in-ecto-and-phoenix/

    【讨论】:

      【解决方案2】:

      假设您有一些组织名称 org 和一个名为 user 的用户,您希望在您之间建立关联,将采取以下步骤在变更集中创建关联

      changeset = Repo.preload(org, :users) # load the :users for the org
      |> Organization.changeset(%{}) # somehow generate a changeset with no changes
      |> Ecto.Changeset.put_assoc(:users, [user]) # creates the association
      

      那么您剩下要做的就是像往常一样应用变更集。 即

      Repo.update(changeset)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-28
        • 1970-01-01
        • 1970-01-01
        • 2020-05-19
        相关资源
        最近更新 更多