2012-04-26 3 views
0

두 모델이 있습니다 : StoreReview. 내 사이트의 사용자는 상점에서 리뷰를 남길 수 있습니다. 내 데이터베이스에는 리뷰를 상점과 연관시키는 조인 테이블 reviews_stores이 있습니다.CakePHP : 참여 테이블이있는 hasMany

내 모델을 어떻게 연결합니까? 내가 Store haveMany라고 가정하고 ReviewReviewStore에 속해야하지만 CakePHP에서 내 reviews 테이블에 store_id이라는 열이 있다고 가정 할 때 조인 테이블에서 CakePHP와 관련된 문제가 발생합니다.

제가 조인 테이블을 사용하는 이유는 내 사이트의 많은 부분을 검토 할 수 있기 때문입니다. 예를 들어, 브랜드. 새 Review 레코드가 만들어지고 brands_reviews 테이블에 레코드가 삽입되어 두 레코드가 연결됩니다.

도움을 주시면 감사하겠습니다.

답변

0

저에게 많은 관계가 아니라 1 - 많은 관계가 그룹화 된 것처럼 보입니다. ID는 조인 테이블을 잃어 버리고 단순히 리뷰가 속한 '그룹'을 설명하는 추가 테이블을 가지고 있습니다. 따라서 검토 테이블에는 review_id, link_id (관련 브랜드 또는 상점의 외래 키), review_type_id (리뷰가 브랜드 또는 상점 용인지 여부를 나타내는 외래 키)가 있습니다. 그런 다음 review_type 테이블은 review_type_id, review_type (varchar) 만 있으면됩니다.

+0

'review_type' 테이블에서'review_type'은'Store' 또는'Brand'와 같을까요? –

+0

그게 내가 어떻게 할 수 있겠는가. 그런 다음 나중에 'review_type'을 더 추가하면 새로운 아이디어를 얻을 수 있습니다. 효과적으로 새로운 카테고리 분류 시스템이 각 검토가 단지 1 개의 리뷰 유형 – mattwadey

+0

감사를 가질 수있는 방법과 유사한 리뷰의 기본 분류 시스템. @mattwadey. 도움이되었지만 더 중요한 것은 답을 수락했습니다. 사물에 관한 엉덩이는 아닙니다. –

1

필드가 "foreign_key"이고 다른 필드가 "model"인 리뷰 테이블과 리뷰 테이블을 사용하는 이유는 무엇입니까? 이로써 테이블을 복제하고 모델을 상속하거나 복제 할 필요가 없습니다. 이렇게하면 조인 테이블의 필요성이 제거됩니다.

DB 디자인을 계속 사용하려면 hasMany 연결에 대해 HABTM 연결을 사용해야합니다. 그러나 당신이 조인트 가능하게하고 싶을지라도 foreign_key/model을 사용할 수 있고 단순히 하나의 조인 테이블과 하나의 리뷰 테이블을 가질 수 있습니다.

그러나 조인 테이블 review_store는 규칙을 따르지 않으므로 reviews_stores 여야합니다. 그러나 brand_reviews에 사용한 스키마와 다릅니다. ;)

+0

위의 예와 같이 리뷰를 다른 모델과 연결할 수도 있기 때문에 조인 테이블은 리뷰를 상점과 연관 짓지 만 브랜드 나 판매 또는 블로그 게시물 등이 될 수 있습니다. –

+2

두 필드 (foreign_key, model)를 사용하여 결합하면이 작업은 필요하지 않습니다. uuids를 사용한다면 모델 필드조차 필요하지 않습니다. 조인 테이블은 * 필요하지 않습니다. – burzum

0

검토 할 수있는 각 모델의 모든 조인 테이블이 필요하지 않으며 모델 이름 자체를 Review 테이블의 필드에 간단히 저장하십시오. 그래서 같은

설정의 관계는 : 데이터베이스를 터치하지 않고 원하는대로

class Store extends AppModel { 
    public $hasMany = array(
     'Review' => array('conditions' => array('Review.model' => 'Store') 
    ); 
} 

당신은 다음과 같은 여러 기타의 모델이 작업을 수행 할 수 있습니다.

+0

고마워요, @Dunhamzzz. 그러나 모델명은 어떻게 바뀌 었습니까? 즉 단순화 된 예로서 '상점'에서 '상점'으로? –

+0

'UPDATE 리뷰 SET 모델 = '샵'WHERE 모델 = '스토어' – Dunhamzzz