如何构建和插入多对多关联

时间:2016-07-15 06:38:46

标签: elixir phoenix-framework ecto

如何使用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进行此操作?

2 个答案:

答案 0 :(得分:2)

我是这样做的:

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/

答案 1 :(得分:1)

假设您有一些组织名称组织和一个名为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)