똑같은 삽질은 2번 하지 말자
ruby on rails 복수의 테이블을 조인해서 모든 컬럼 조회 본문
1:N , N:1 관계 정리
우선 ORM(ApplicationRecord < ActiveRecord)에게 테이블간의 관계를 확립시켜주는게 필요하다.
상품테이블이 있고 그 상품에는 브랜드와 카테고리라는 항목이 존재한다.
그렇게되면 모든 상품에는 하나의 브랜드, 카테고리가 존재하며 / 하나의 브랜드,카테고리에는 여러개의 상품이 존재한다.
models/product.rb
class Product < ApplicationRecord
belongs_to :brand, foreign_key: :pr_br_id, primary_key: :br_id
belongs_to :category, foreign_key: :pr_ca_id, primary_key: :ca_id
end
models/category.rb
class Category < ApplicationRecord
has_many :product
end
models/brand.rb
class Brand < ApplicationRecord
has_many :product
end
그리고 이제 조인해서 select *을 날려주면 끝난다.
@result = Product.joins(:brand, :category).select('*')
결과물의 각 요소들은 해당 테이블의 컬럼 물리명으로 되어있기때문에 그걸로 알아서 맵핑해서 리턴시켜주니 잘되었다.
inner join / outer join 헷갈릴때 보면 바로 이해되는 기사
[Database] INNER JOIN과 OUTER JOIN의 차이
중복 없는 열(column)들을 Join한다고 가정했을 때, 가장 일반적인 경우입니다: A와 B를 Innter-Join하면 A와 B의 교집합을 얻을 수 있습니다. A와 B를 Outer-Join하면 A와 B의 합집합을 얻을 수 있습니다. Exam
jetalog.net
Comments