2011-12-26 3 views
1

FileImage 또는 FileVideo와 관련된 엔터티 콘텐츠가 있습니다. Doctrine 2에서 올바른 방법은 무엇입니까?Doctrine 2 상호 배타적 관계

콘텐츠는 FileImage 또는 FileVideo와 관련이 있어야하며, 결코 둘 다없고 절대로 존재하지 않아야합니다.

주석 구문을 사용하여 위의 문제를 해결하는 실제적인 예는 무엇입니까?


아니면이 잘못된 방법을 찾고 있습니까?

내 디자인 아이디어; 파일은 MogileFS를 사용하여 저장됩니다. MogileFS는 파일 이름에 인덱싱 된 서버의 하위 집합에 각 파일의 여러 복사본을 보관합니다. FileVideo는 파일 유형 (E.G FileVideo 및 FileImage)에 따라 다른 여러 속성 (축소판, 크기 조정 등)에 대한 파일 이름 목록을 포함합니다. 파일 자체의 경로는 FileVideo 관계에 의해 Doctrine 2 외부의 MogileFS 매퍼에로드됩니다. 비즈니스 로직은 ref가 포함 된 콘텐츠 모델에만 관심을 가져야합니다.

답변

2

어떤 종류의 상속을 고려하십시오. FileVideo 및 FileImage는 일부 상위 엔터티 "File"의 하위 클래스가 될 수 있으며 Content 엔터티는 "File"에 대한 @OneToOne 또는 @ManyToOne 관계를 갖습니다. Content.file이 null이 아닌지 확인하려면 자체 장치에 맡겨야합니다.

이 경우 클래스 테이블과 단일 테이블 상속 구현 사이를 결정한다는 점에서 유의하십시오. CTI는 더 정규화 된 스키마를 제공 할 것이며, 상속 그래프가 커질 가능성이 있다면 더 유연 할 것입니다. force doctrine to always eager-load the relation

+0

데이터베이스가 아닌 기존 상위 엔터티를 처리하기 위해 Doctrine에 대한 주석을 작성하는 방법은 무엇입니까? 심지어 할 수 있습니까? FileImage 및 FileVideo를 참조하는 File에 대한 또 다른 조인 테이블을 갖는 것이 좋은 해결책은 아닙니다. (E.G는 왜이 참조 로직을 Content 엔티티에 머물 수 없습니까?) 또는 두 개의 열이 필요하며 이들이 상호 배타적인지 확인하는 엔티티 세터가 있습니까? –

+0

파일은 인스턴스화하지 않은 엔티티 일뿐입니다 (따라서 추상적이 아니더라도 처리 할 수 ​​있습니다). 너무 많은 테이블/조인이 걱정된다면, 단일 테이블 상속을 사용할 수 있습니다. – timdev

관련 문제