내 친구와 저의 친구가 조리법을 저장하기 위해 다국어 웹 애플리케이션을 개발 중입니다. 우리는 지속성을 위해 Doctrine 2.1.1을 사용합니다. 지금은 엔티티 용 모델을 생성하고 누군가가 내게 힌트를 주거나 우리 사례에 대한 모범 사례를 보여주기를 바랍니다.Doctrine2 : 외래 키가 여러 개인 테이블에 대한 연관 매핑
나는 ERD를 광범위하게 설명하려고 노력할 것이다. 이해할 수없는 것이 있으면 언제든지 물어보십시오. 우리의 신청서는 엔티티가 recipe
, ingredients
, units
(성분 측정 단위) 및 categories
입니다. 이러한 엔티티 각각은 자체 테이블에 저장됩니다. 각 개체는 여러 언어로 번역 될 수 있습니다. 번역 저장은 translations
이라는 이름의 테이블에 저장됩니다. 이제 약간 까다로울 것입니다 ... mnemonic
이라는 추가 테이블이 있습니다. 우리는 글로벌 컨텍스트에서 조리법, 재료, 카테고리 및 측정 단위를 식별하는 데이 방법을 사용합니다 ... 가장 좋은 비유는 제가 생각하기에 GUID입니다. 연상 기호는 또한 조리법, 재료 등과 번역을 매핑하는 데 도움이됩니다. 니모닉 테이블은 id
(기본 키)과 4 개의 추가 메타 데이터 행 : ingredient_id
, recipe_id
, category_id
및 unit_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 클래스 일 수 있다고 생각했습니다. 모든 퍼시스턴스 로직을 모델에서 제거하고 특별한 경우를 처리 할 수 있습니다.
당신은 어떻게 생각하십니까? 가장 좋은 솔루션은 무엇입니까? 조언에
안부
폴