내 Phoenix 앱에는 연락처 테이블과 주소 테이블이 있습니다. 접촉 스키마는 다음과 같습니다외 국인 외래 키
는schema "contacts" do
field :name, :string
field :number, :string
has_one :address, App.Address, on_delete: :nothing
timestamps()
end
주소 스키마는
schema "addresses" do
field :name, :string
field :lat, :decimal
field :lng, :decimal
timestamps()
end
난 그냥 데이터베이스에서 작성 주소의 드롭 다운을 통해 선택할 수 연락처에 address_id있다 할 것입니다. 그러나 피닉스는
`App.Address.contact_id` in `where` does not exist in the schema in query:
from a in App.Address,
where: a.contact_id == ^9435,
select: {a.contact_id, a}
을 반환 그래서하지만 내가 주소를 연락처 또는 여러 연락처에 포함시킬 주소에 contact_id 필드를 찾기 위해 노력하고있다,하지만 난 주소 테이블의 contact_id 필드를 원하지 않는다 . 외계인 협회와 함께 이것을 어떻게 달성 할 수 있습니까?
각 contact_id 및 address_id에 대한 항목이있는 중간 테이블을 사용하여이 작업을 수행 할 수 있다는 것을 알고 있지만 불필요한 복잡성과 추상화 수준을 추가한다고 생각하기 때문에 피하는 것이 좋습니다.
편집 : 답변 해 주셔서 감사합니다. 게시물을 게시 한 후 몇 분 뒤 역순으로 생각해야한다는 것을 깨달았습니다. 주소를 생각할 때 주소가 많고 연락처에 주소가 하나 있으면 관계가 의미가 있습니다. 나는 그 주소가 반드시 그 사실 일 필요가 없을 때 그 연락처가 속한 것이라고 생각하는 막혔다. Contact
는 하나의 Address
수와 Address
여러 Contact
들에있을 수 있고 address_id
필드는 contacts
테이블에 있다면
"주소 테이블에 contact_id 필드가 필요하지 않습니다."그러면 레코드가 데이터베이스에 어떻게 연관됩니까? – Dogbert
많은 연락처가 하나의 주소를 공유 할 수 있습니다. 그러나 각 연락처에는 하나의 주소 만 있습니다. – albydarned