【发布时间】:2017-10-08 00:30:09
【问题描述】:
我正在学习 phoenix 和 ecto 关联,但在尝试预加载嵌套关联时偶然发现了一个似乎无法解决的问题。我有 3 个架构
提供有
schema "offers" do
...
has_one :albumMariageSmall, Album, on_delete: :delete_all, on_replace: :delete
has_one :prewedding, Prewedding, on_delete: :delete_all,
on_replace: :delete
has_one :next_day, Prewedding, on_delete: :delete_all, on_replace: :delete
end
现在,婚礼前的样子
schema "preweddings" do
...
has_one :album, Album, on_delete: :delete_all, on_replace: :delete
end
专辑看起来像
schema "albums" do
...
belongs_to :offer, Offer
belongs_to :prewedding, Prewedding
end
换句话说,一个offer可以有一个Album和两个Prewedding,其中Prewedding可以有一个Album。
在数据库方面,:preweddings 通过 offer_id 引用报价,:albums 通过 offer_id 引用报价,而 preweddings 通过 prewedding_id 引用。
我无法加载任何已保存的报价,因为 :prewedding 和 :next_day 在我检查时似乎指向同一行。
我正在尝试使用预加载
offer=Repo.one from(o in Offer, preload: [{:prewedding, [:album]},{:next_day, [:album]}], select: o, where: o.id==^id)
我认为我可以让它与连接一起工作,但我很固执地想要进行预加载。
有人可以帮忙吗?
婚前迁移就是这样
add :included, :boolean, default: false, null: false
add :offer_id, references(:offers)
专辑有
add :offer_id, references(:offers)
add :prewedding_id, references(:preweddings)
【问题讨论】:
-
你能发布你的“婚礼前”迁移吗?您可能需要为“offers”中的两个
has_one指定一个自定义foreign_key,否则它们都将指向offer_id列。 -
mmm 没有自定义外键,当我尝试时,我添加到相册(参考)。让我看看。
-
好吧,如果你想要两个相同的
has_one,你需要在婚礼前的两列指向报价。现在两者都使用offer_id,这意味着两者具有相同的值。 -
我不太确定我知道如何实现它。你能详细说明一下吗?
-
好的,知道了!你的 cmets 最终让我明白了 :)
标签: elixir phoenix-framework ecto