Ассоциация в PostgreSQL через Ecto - PullRequest
0 голосов
/ 16 мая 2018

Я новичок в PostgreSQL. У меня проблема в связи между родителем и ребенком. Допустим, у нас есть две схемы, называемые TableA и TableB. Мне нужно связать TableA и TableB. В котором первичный ключ TableA может или не может быть необходим в TableB для «определенных ролей» (у меня есть три роли, называемые E, F и G. Для GI не требуется запись в TableB, но она мне нужна для остальных роли). Как я могу общаться. Какую ассоциацию мне нужно использовать, есть ли has_many, has_one и т. Д., Есть ли способ исправить это. Вы можете найти ссылку здесь Экто Схема

TableA Schema

    schema "TableA" do
      field :name, :string
      field :role, :string
      field :status, :string

      timestamps()
    end

TableB Schema

    schema "TableB" do
      field :address1, :string
      field :address2, :string
      field :city, :string
      field :companyname, :string
      field :contactno, :string
      field :country, :string
      field :email, :string
      field :mobileno, :string
      field :state, :string
      field :status, :string
      field :type, :string
      field :zipcode, :string

      timestamps()
    end

1 Ответ

0 голосов
/ 18 мая 2018

Хорошо, так что ваши бизнес-правила меня немного смутили из-за ABCDEFG.Но мы все еще можем говорить об ассоциациях!

Похоже, у вас есть таблица "address" и таблица "address_roles" (это как "Work" и "Home"?)

Вот как я настроил эти таблицы в своих миграциях ( и вот документация ) ...

def change do
  alter table("addresses") do
    add :address_role_id, references("address_roles")
  end
end

... и в схемах, которые вы можете предоставить длядвухсторонняя природа принадлежащих и обладающих многими посредством ( и вот документация ) ...

defmodule MyApp.Address do
  schema "addresses" do
    has_many :address_roles, MyApp.AddressRole
  end
end

defmodule MyApp.AddressRole do
  schema "address_roles" do
    belongs_to :address, MyApp.Address
  end
end

Это то, что вы ищете?

...