> Map.delete(...

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

cannot

m1 = Repo.get(MyModel, 123)
|> Map.delete(:id)

m2 = Repo.insert!(m1, %{my_field: "aaa"})
# or
# m2 = Repo.insert!(MyModel.changeset(m1, %{my_field: "aaa"}))

manipulate

(RuntimeError) attempting to cast or change association `my_assoc1` from `MyModel` that was not loaded. 
Please preload your associations before manipulating them through changesets

my_assoc1_id我有一个模型,它有几个" belongs_to "和 "has_many "我想用一个新生成的 "id "和一些其他字段的新值来复制它。

和错误。

我不想预先加载每个关联。此外,如果我想让一个复制的模型实例拥有

,这是一个整数,与原始实例相同,也就是说,是否加载关联应该是不重要的。
elixir phoenix-framework ecto
1个回答
0
投票

我有一个模型,它有几个" belongs_to "和 "has_many",我想用一个新生成的 "id "和其他字段的新值来复制它。 m1 = Repo.get(MyModel, 123) 像这样铸造关联 belongs_tohas_many 直接使用。这些关联是一个抽象层,这样你可以更容易地操作数据。

比如说

schema "my_model" do
    belongs_to :my_field, Example
end

如果你看一下数据库或迁移, 你可以注意到,一个字段称为: my_field_id 被创建,其中包含指向其他表的外键。

如果你想克隆一个包含所有关联的实体,你只需要创建一个变化集,确保外键也被投递。

def changeset(my_model, params \\ %{}) do
    user
    |> cast(params, [:my_field_id])
    |> validate_required([:my_field_id])
    |> foreign_key_constraint(:my_field_id)
  end
© www.soinside.com 2019 - 2024. All rights reserved.