2012-03-08 144 views
0

我想直接建模我的數據庫,而不是通過Doctrine。什麼是定義我的實體的最佳方式?在Doctrine 2中定義實體的最佳實踐是什麼

據我所知,如果我從數據庫創建一個實體,我不能對它做任何改變,因爲每當我改變我的數據庫時它將被重寫。

它是確定這樣定義

<?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()); 
    } 
} 

我選擇definie這樣 你好。我在定義這樣

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註釋或在YAMLXML註釋您的模型沒有太大的區別。注意他們對你的模型進行描述是很重要的,因爲Doctrine可以做它設計要做的聰明事情(ORM)。

另外,在模型中描述數據庫結構並不要求您實際將其與數據庫服務器同步,它只是教條知道實體具有哪些屬性和方法的一種方式,您也可以選擇將模型同步您的數據或反之亦然。

+0

我編輯我的帖子來顯示我定義我的對象。我不明白你的意思是「我會建議使用映射功能原則使用」。 – catalinux 2012-03-08 10:07:19

+0

你的意思是:「還描述你的模型中的數據庫結構並不需要你實際將其與數據庫服務器同步,它只是一種學說方式來了解實體具有哪些屬性和方法,也可以選擇你也可以使您的模型與您的數據同步,反之亦然。「 – catalinux 2012-03-08 10:10:15

+0

那麼......你可以用你的代碼中的MetaDrivers完美地記錄你的模型,但你實際上並不需要用它來建模你的數據庫。你可以手工完成模型的設計,而不需要從模型中定義的元數據生成它。 – ChrisR 2012-03-08 10:13:17