2011-03-09 7 views
0

모든 자산 유형에서 공유하는 모든 필드가 포함 된 자산 테이블이 있습니다 (예 : architects에 속하는 자산과 construtors에 속하는 자산 :CakePHP 다중 HABTM 관계

지금, 나는이 개 자산 유형이 등 name, path, filetype, size. 그래서 HABTM 즉,이 두 유형에 대한 관계,

 |-------- architects_assets ------- architects 
assets| 
     |-------- constructors_assets ----- constructors 

을 설정 문제입니다 자산을 만들 때, 나는 각 자산이 어느 쪽 architects_asset또는constructors_asset의가되고 싶어요 - 자산은 결코 건축가이자 생성자 자산이 아닙니다.

간단한 해결책은 architect_assetsconstructors_assets 테이블을 작성하고 assets 테이블을 삭제,이 방법은 추가 할 수 있기 때문에, 편집,보기, 개별적으로 각 유형을 삭제하는 것입니다. 또는 assets 컨트롤러에서 architects_asset_addconstructors_asset_add 작업을 만들 수 있다고 생각하지만 편집,보기 및 삭제를 위해 동일한 작업을 수행해야합니다. 이는 부풀어 오른 것으로 보입니다.

어떻게이 문제에 접근합니까?

답변

1

hasMany에서까지의 관계를 사용하여이 문제를 해결할 수있었습니다. 이것은 architects_assetsconstrutors_assets에 대해 별도의 컨트롤러를 만드는 것을 의미했지만, 2 가지 자산 유형을 명확하게 구분해야 할 때 주어진 상황에 맞습니다.

결과의 모델 :

//asset 
class Asset extends AppModel { 
    public $hasMany = array('ArchitectAsset', 'ConstructorAsset') 
} 

//architect asset 
class ArchitectAsset extends AppModel { 
    public $belongsTo = array('Architect, Asset'); 
} 

//architect 
class Architect extends AppModel { 
    public $hasMany = 'ArchitectAsset'; 
} 

//and the same for the ConstructorAsset and Constructor models 
0

이 두 가지 동작을 지원하는 새로운 CRUD 메소드를 추가하기 위해 자산 모델을 수정하는 것이 좋습니다.
물론 모델 코드가 커지면 아키텍처 또는 생성자 관계와 관련이없는 작업을 수행해야하는 경우에 대비하여 모든 자산을 동일한 테이블에 보관할 수 있습니다.