2014-11-10 2 views
3

여러 가지 유형의 하위를 하나 이상 가질 수있는 '패키지'라는 모델이 필요합니다. 예를 들어, 패키지에는 안내선뿐만 아니라 양식 및 기타 내용 유형 (일부는 나중에 추가 될 것입니다)이 포함될 수 있습니다. 서로 다른 테이블의 각 컨텐트 항목은 여러 패키지에있을 수 있습니다.Sails.js/Waterline의 조합 외래 키와의 연관

Package table 
============= 
id 
name 
.... 

PackageContent table 
============= 
id 
packageId 
contentType 
contentId 

Guide table 
============= 
id 
name 
... 

Form table 
============= 
id 
name 

가 어떻게 sails.js 내 Package.js 모델 파일 내 패키지의 '내용'관계를 정의 할 수 있습니다 : 그래서 나는 다음과 같은 스키마를 가지고? sails.js 또는 Waterline에서 조합 된 외래 키에 대한 정보를 찾을 수 없었습니다.

// models/Package.js 
module.exports = { 
    attributes = { 
    name: 'text', 

    .... 

    content: { 
     through: 'PackageContent', 
     collection: contentType, 
     via: 'contentId' 
    } 
    } 
}; 

답변

1

최근에 비슷한 문제가 있습니다. 내 솔루션은 중간 모델에서 다른 외래 키를 만들고 특성을 'required : false'로 설정하는 것입니다. 당신의 예에서 PackageContent 테이블은 다음과 같이 수 :

//PackageContent.js 
module.exports={ 
    attributes={ 
     package:{ 
      model:'package', 
     }, 
     guide:{ 
      model:'guide' 
      require:false 
     }, 
     form:{ 
      model:'form' 
      require:false 
     } 
     //other attributes... 
    } 
} 

중복 패키지 + 콘텐츠 조합을 방지하기 위해, 당신은 중복을 확인하는 beforeValidate 방법을 쓸 필요가있다. 이것이 '좋은 디자인'인지 확실하지는 않지만 문제는 해결됩니다.

+0

언급했듯이 몇 가지 추가 필터링이 필요합니다. – mwotton