2014-04-21 13 views
2

내 모델을 본인과 분리했습니다. 나는 대응 엔티티가있는 Review, RatedReview 및 ScoredReview라는 세 가지 모델을 가지고 있습니다. 그들의 관계는 ScoredReview extends ReviewReview extends Review입니다. Symfony + Doctrine : 모델 및 상속

그래서 내 모델 내가 가진 :
// Project/ReviewBundle/Model/Review.php 

class Review 
{ 
} 

// Project/ReviewBundle/Model/RatedReview.php 

class RatedReview extends Review 
{ 
} 

// Project/ReviewBundle/Model/ScoredReview.php 

class ScoredReview extends RatedReview 
{ 
} 

그럼 내가 지금처럼 모델을 확장하여 엔티티를 구현합니다
// Project/ReviewBundle/Entity/Review.php 

use Project\ReviewBundle\Model\Review as BaseReview; 

class Review extends BaseReview 
{ 
} 

// Project/ReviewBundle/Entity/RatedReview.php 

use Project\ReviewBundle\Model\RatedReview as BaseRatedReview; 

class RatedReview extends BaseRatedReview 
{ 
} 

// Project/ReviewBundle/Entity/ScoredReview.php 

use Project\ReviewBundle\Model\ScoredReview as BaseScoredReview; 

class ScoredReview extends BaseScoredReview 
{ 
} 

그래서 상속 모델 측에서 일어나고있다. Doctrine은 이것을 보지 못하고 테이블을 분리하여 매핑합니다. Doctrine은 모델을 확장하는 엔티티가 아닌 다른 엔티티를 확장하는 엔티티 만 찾기 때문에 이것이 이해됩니다.

엔티티를 확장하는 기능을 유지하면서 모델을 엔티티에서 분리하는 더 좋은 방법이 있습니까? 이것이 형질이 편리한 곳입니까?

다른 식으로 말하자면, 어쨌든 모델로 구성된 트리를 가질 수 있습니까? 이러한 모델을 확장하는 엔티티로 구성된 트리가 있습니까?

+2

교리 상속을 보았습니까? http://doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html 단일 테이블 상속처럼 보입니다. – Cerad

+0

@ Kerad 나는 단일 테이블 상속을 사용하고 있으며 일반적으로 멋지게 작동합니다. 여기서 문제는 단일 테이블 상속이 서로를 확장하는 모델을 확장하는 대신 엔티티가 직접 확장해야한다는 것입니다. 그러나 엔티티가 아니라 모델에서 ScoredReviews에 대한 내 논리를 원했습니다. 나는 기본 클래스에 대해 하나의 모델을 사용하고 하위 클래스에 대해 특성을 사용하여이를 해결했습니다. – JProffitt

답변

1

저는이 문제에 대한 해결책을 제시했으며, 특성을 포함하고 있습니다.

내가하고있는 일은 기본적으로 여러 가지 변형 된 표를 만드는 것입니다. 리뷰 간의 관계는 수직적 인 것보다 수평 적입니다 (한 가지 리뷰 유형은 평점을, 다른 유형은 평점, 다른 하나는 동영상, 다른 하나는 둘 다). 형질은 수평 적 관계에있어 명백히 완벽하기 때문에 각 변이에 대한 모델을 만드는 대신 특성을 만듭니다.

// Project/ReviewBundle/Entity/Review.php 

use Project\ReviewBundle\Model\Review as BaseReview; 

class Review extends BaseReview 
{ 
} 

// Project/ReviewBundle/Entity/RatedReviewTrait.php 

trait RatedReviewTrait 
{ 
} 

// Project/ReviewBundle/Entity/ScoredReviewTrait.php 

trait ScoredReviewTrait 
{ 
} 

을 그리고 내 실체는 다음과 같다 :

그래서 지금 내 "모델"과 같이

// Project/ReviewBundle/Entity/Review.php 

use Project\ReviewBundle\Model\Review as BaseReview; 

class Review extends BaseReview 
{ 
} 

// Project/ReviewBundle/Entity/RatedReview.php 

use Project\ReviewBundle\Model\RatedReviewTrait; 

class RatedReview extends Review 
{ 
    use RatedReviewTrait; 
} 

// Project/ReviewBundle/Entity/ScoredReview.php 

use Project\ReviewBundle\Model\RatedReviewTrait; 
use Project\ReviewBundle\Model\ScoredReviewTrait; 

class ScoredReview extends Review 
{ 
    use RatedReviewTrait; 
    use ScoredReviewTrait; 
} 

내 모델 내 기관에서 분리 유지 및 보너스로 내가 변화를 분리 서로에게서 - 꽤 굉장한. 내가 보는 유일한 문제는 PHP> = 5.4가 필요하다는 것입니다.

+0

문제가 해결되면 스스로 대답을 수락 할 수 있습니다. –

+0

@ n.1 감사합니다. 나는 48 시간을 기다려야했고 돌아 오는 것을 잊었습니다. – JProffitt