【问题标题】:Elixir Ecto : validate belongs_to between two different databasesElixir Ecto:验证两个不同数据库之间的 belongs_to
【发布时间】:2018-12-13 21:06:53
【问题描述】:

在我的伞形应用程序中,目前有两个应用程序,每个应用程序都基于自己的数据库...

我在app2 中有一个架构,它从app1 的对象中引用uuid。

DB1 :
  Table : parent
    parent_id: uuid
    name: string

DB2 :
Table : child
    child_id: uuid
    parent_id: uuid
    name: string

然后是架构:

  schema "child" do
    field :name, :string
    belongs_to(:parent, Parent, type: :binary_id)

    timestamps()
  end

如何让变更集验证parent_id 是否有效并存在于其表中?我尝试了一些东西,比如assoc_constraint(:parent),但我知道这行不通……也许我应该重新考虑这种关系以及它是如何运作的。

先谢谢了。

【问题讨论】:

    标签: elixir phoenix-framework ecto


    【解决方案1】:

    简短的回答是:不,不可能在不同数据库之间建立开箱即用的关系。因此,如果 parent 是不同数据库中的表,则您不能在 Child 中拥有 belongs_to(:parent, Parent, type: :binary_id)。

    长答案是,根据您的 RDBMS,可能可以定义数据库之间的关系。例如,Postgres 有一些扩展,如 dblink 和 postgres_fdw,它们在here 中有简要描述。

    【讨论】:

    • 嘿,谢谢。我知道你不能很容易地在不同数据库中的表之间拥有 FK,但是,编程验证应该是可能的......所以,即使它不能立即工作,问题是,我应该怎么做才能工作 ?创建一个自定义验证函数,它将检索parent 并进行检查?该功能属于哪里?不在变更集中,这是肯定的......
    • 是的,我认为在另一个 repo 中进行检查的自定义验证器应该在这里工作。该验证器必须从 changeset 函数中调用,并且可以在您的模型/模式文件中定义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多