2012-03-08 3 views
0

Doctrine을 통해서가 아니라 데이터베이스를 직접 모델링하고 싶습니다. 내 개체를 정의하는 가장 좋은 방법은 무엇입니까?Doctrine 2에서 엔티티를 정의하는 가장 좋은 방법은 무엇입니까

데이터베이스에서 엔티티를 만들면 데이터베이스를 바꿀 때마다 다시 작성되기 때문에 변경할 수 없습니다.

내가이 안녕과 같이 definie 선택이

<?php 
/* entity code generated */ 
class MyEntityBase 
{ 
    private $id; 
    private $title; 

    function getTitle() 
    { 
     return $this->title() 
    } 
} 

class MyEntity extends MyEntityBase 
{ 
    function getTitle() 
    { 
     return trim($this->title()); 
    } 
} 

과 같이 정의 할 좋아합니다. 나는 그것을 훨씬 쉽게 관계와 협력하게하기 때문에 매핑 기능의 교리를 사용하여 조언을 것이지만,이처럼 엔티티를 정의 아무 문제가 없습니다이

class Article 
{ 
    /** @Id @Column(type="integer") @GeneratedValue */ 
    private $id; 

    /** @Column(type="string") */ 
    private $title; 


    function setTitle($title) 
    { 
     $this->title = $title; 
    } 

    function __construct() { 
//  $this->comments = new ArrayCollection(); 
    } 

} 

$article = $em->find('Article', 1); 

답변

2

같은 정의에 선택합니다.

DocBlock 주석을 사용하거나 모델에 YAML 또는 XML으로 주석을 추가하도록 선택했는지 여부는 별 차이가 없습니다. Doctrine이 할 수있는 스마트 한 기능 (ORM)을 수행 할 수 있도록 모델을 설명하는 주석을다는 것이 중요합니다.

모델의 데이터베이스 구조가 데이터베이스 서버와 실제로 동기화 할 필요가 없다는 것을 설명하는 것은 doctrine이 엔티티에 어떤 속성과 메소드가 있는지 알기위한 방법 일뿐만 아니라 선택적으로 모델을 귀하의 데이터 또는 그 반대입니다.

+0

나는 나의 목표를 정의하기 위하여 나의 포스트를 편집했다. 나는 당신이 "매핑 기능 교리를 사용하여 조언을 사용하는 것"이라는 의미를 이해하지 못합니다. – catalinux

+0

당신은 무엇을 의미합니까? "귀하의 모델에서 데이터베이스 구조를 설명하는 것은 데이터베이스 서버와 실제로 동기화 할 필요가 없다는 것을 의미합니다. 그것은 단지 교리가 엔티티가 가지고있는 속성과 메소드를 알기위한 방법 일뿐만 아니라 선택적으로 모델을 데이터와 동기화하거나 모델을 데이터와 동기화하십시오. – catalinux

+0

음 ... 코드에서 MetaDrivers로 모델을 완벽하게 문서화 할 수 있지만 데이터베이스를 모델링 할 때 실제로 사용할 필요는 없습니다. 모델에서 정의한 MetaData에서 실제로 DB를 생성하지 않고 DB를 수동으로 완벽하게 모델링 할 수 있습니다. – ChrisR

관련 문제