我正在學習鳳凰和ecto協會,但我偶然發現了一個問題,我似乎無法解決,同時嘗試預載嵌套關聯。我有3種模式Ecto預載嵌套
有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
現在
的報價,Prewedding貌似
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
換句話說,發價有一個相冊和兩個Prewedding,其中Prewedding可以有一個相冊。
數據庫方面,preweddings通過offer_id引用報價,並且:專輯通過offer_id引用報價並通過prewedding_id進行預安裝。
我無法加載任何保存的報價,因爲兩者:prewedding和:next_day似乎指向同一行,當我檢查。
我試圖用
offer=Repo.one from(o in Offer, preload: [{:prewedding, [:album]},{:next_day, [:album]}], select: o, where: o.id==^id)
預載我以爲我可以把它與連接的工作原理,但我有足夠的固執的想要做的預緊力。
有人可以協助嗎?
preweddings的遷移是眼前這個
add :included, :boolean, default: false, null: false
add :offer_id, references(:offers)
專輯有
add :offer_id, references(:offers)
add :prewedding_id, references(:preweddings)
你可以發佈你的 「preweddings」 的遷移?您可能需要在「offers」中爲這兩個'has_one'指定一個自定義'foreign_key',或者它們都將指向'offer_id'列。 – Dogbert
mmm沒有自定義外鍵,當我嘗試時,我添加到相冊(參考)。讓我看看。 –
那麼,如果你想要兩個'has_one'完成相同的操作,你需要兩個預先指定的列。現在兩者都使用'offer_id',這意味着兩者都具有相同的值。 – Dogbert