2011-09-04 5 views
3

내 친구와 저의 친구가 조리법을 저장하기 위해 다국어 웹 애플리케이션을 개발 중입니다. 우리는 지속성을 위해 Doctrine 2.1.1을 사용합니다. 지금은 엔티티 용 모델을 생성하고 누군가가 내게 힌트를 주거나 우리 사례에 대한 모범 사례를 보여주기를 바랍니다.Doctrine2 : 외래 키가 여러 개인 테이블에 대한 연관 매핑

나는 ERD를 광범위하게 설명하려고 노력할 것이다. 이해할 수없는 것이 있으면 언제든지 물어보십시오. 우리의 신청서는 엔티티가 recipe, ingredients, units (성분 측정 단위) 및 categories입니다. 이러한 엔티티 각각은 자체 테이블에 저장됩니다. 각 개체는 여러 언어로 번역 될 수 있습니다. 번역 저장은 translations이라는 이름의 테이블에 저장됩니다. 이제 약간 까다로울 것입니다 ... mnemonic이라는 추가 테이블이 있습니다. 우리는 글로벌 컨텍스트에서 조리법, 재료, 카테고리 및 측정 단위를 식별하는 데이 방법을 사용합니다 ... 가장 좋은 비유는 제가 생각하기에 GUID입니다. 연상 기호는 또한 조리법, 재료 등과 번역을 매핑하는 데 도움이됩니다. 니모닉 테이블은 id (기본 키)과 4 개의 추가 메타 데이터 행 : ingredient_id, recipe_id, category_idunit_id의 5 개 행으로 구성되어 있으며 친척의 기본 키와 1 : 1 관계를 나타냅니다.

니모닉 엔티티와 조리법, 재료 등의 관계를 어떻게 매핑하는지 직접 묻습니다. 니모닉 테이블의 category_id을 카테고리 테이블의 기본 키 값으로 자동 채우는 방법 (구체적으로)?

class Category 
{ 
/** 
* @var integer $id 
* 
* @Column(name="id", type="bigint", nullable=false) 
* @Id 
* @GeneratedValue(strategy="IDENTITY") 
* @OneToOne(targetEntity="Mnemonic", mappedBy="category") 
* @JoinColumn(name="id", referencedColumnName="category_id") 
*/ 
private $id; 

와 니모닉 모델 :

나는 나의 카테고리 모델에서 처음으로 협회의 이런 종류의 매핑을 시도

class Mnemonic 
{ 
/** 
* 
* @OneToOne(targetEntity="Category", inversedBy="mnemonic") 
* @JoinColumn(name="category_id", referencedColumnName="id") 
*/  
private $categoryId; 

작동하지 않았다 - 교리에 오류가 발생 '말아 카테고리 테이블 만 채 웁니다. 그래서 카테고리 모델의 __construct 메소드에서 코드를 작성하여 니모닉 객체를 만들고 category 모델의 ID에 따라 categoryId를 설정 한 다음 doctrine의 엔티티 관리자에 바인드 할 수 있다고 생각했습니다. 그러나 그것은 추한 것입니다. 저는 모델 클래스가 지속성에 책임 져서는 안된다고 생각합니다. 내 질문을 쓰는 동안 해결책은 일종의 Factory 클래스 일 수 있다고 생각했습니다. 모든 퍼시스턴스 로직을 모델에서 제거하고 특별한 경우를 처리 할 수 ​​있습니다.

당신은 어떻게 생각하십니까? 가장 좋은 솔루션은 무엇입니까? 조언에

안부

답변

1

당신은 onFlush에 대한 이벤트 리스너를 추가하는 방법에 대한 생각 했습니까? 그래서 본질적으로 플러시 할 때 어떤 오브젝트를 지속하는지 확인한 다음 Mnemonic 오브젝트를 생성하는 것과 같은 코드를 실행하십시오. 이벤트를 onFlush 등록에 대한

정보는 다음 링크에서 교리 웹 사이트에서 찾을 수 있습니다 :

http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/events.html#onflush

관련 문제