2011-02-08 3 views
2

나는 ORM에 익숙해지기에 좋은 자산이라고 판단하고 Doctrine 2를 ORM으로 선택했습니다.Doctrine 2의 관련 항목 얻기

Doctrine의 기본 사항을 배우기위한 테스트 프로젝트를 진행하고 있습니다. 대부분의 사람들은 보통 블로그를 가지고 있지만 주문을 저장하고 추적 할 수있는 기본 앱을 만들기로 결정했습니다.

User 
    id 
    name 
Product 
    id 
    name 
    price 
Sales_order 
    id 
    user_id 
    product_id 
    quantity 
    unit_price 

는 따라서 내 주문 모델은 다음과 같습니다 : 질문은, 지금

/** 
* @Entity 
* @Table(name="sales_order") 
*/ 
class Order { 

    /** 
    * @Id 
    * @Column(type="integer", nullable=false) 
    * @GeneratedValue(strategy="AUTO") 
    */ 
    private $Id; 

    /** 
    * @OneToOne(targetEntity="User", inversedBy="user") 
    */ 
    private $user; 

    /** 
    * @OneToOne(targetEntity="Product", inversedBy="product") 
    */ 
    private $product; 

    /** 
    * @Column(type="integer", nullable=false) 
    */ 
    private $quantity; 
} 

사용자 모델에서 모든 주문에 액세스하는 간단한 방법이 다음과 같이 내 데이터베이스 스키마는 것 ? DQL (doctrine query language)을 이런 종류의 기본 요소에 대해 작성해야합니까? 아니면 관련 엔티티를 쉽게 얻을 수있는 방법이 있습니까? 내 말은, 그렇지 않으면 아무런 의미가 없을 거란 말이지, 그렇지? 또한, 나는 이러한 연관성을 올바르게하고 있습니까? 나는이 매우 기본적인 모델에 정말 혼란스러워 ... 자세한 도움은 정말 고맙습니다. 고맙습니다.

답변

2

첫째, 데이터베이스 디자인에 대해 너무 걱정하지 마십시오. 엔티티를 디자인하고 SchemaTool을 사용해야합니다.

이제 사용자 모델에서 모든 주문에 액세스하는 간단한 방법이 있습니까?

사용자에게 관련된 사용자 모델, 또는 액세스 모든 주문을 에서 모든 주문에 액세스 의미합니까?

당신이 전자를 의미한다면, 당신은 잘못을 저지르고 있습니다 (아래 참조). 나중을 의미하는 경우 주문과 사용자간에 bi-directional relationship을 설정해야합니다. (BTW, OneToMany가 OneToOne이 아니므로 한 명의 사용자가 많은 주문을받을 수 있습니다.) 따라서 많은 PHP 프로그래머와 - - 인 DataMapper pattern의 기본 이해와


나는이 아주 기본 모델에서 정말 혼란 스러워요은 ...

나는 당신에 문제가 어떻게 생각 궁극적으로는 도메인 기반 디자인이기도합니다. 데이터베이스 테이블이 아닌 지속 가능한 객체를 다루고 있음을 기억하십시오.

나는 책을 쓸 것이기 때문에 여기에서 자세한 정보를 제공 할 수 없으므로 원칙 기반의 시작을 돕기 위해 도메인 기반 디자인에 대한 책을 얻으시기 바랍니다. Federico Cargnelutti의 일련의 블로그 게시물과 같이 유용한 온라인 리소스가 몇 가지 있습니다.하지만 Doctrine 2에만 국한되지는 않습니다.

+0

양방향 일대 다 관계가 내가 찾고있는 것이 었습니다. 이제 의미가 있습니다 ... 고마워요! –

관련 문제