2012-01-27 36 views
1

任何人都可以告訴我它是否可以重寫doctrine2持久對象魔術getters \ setters?我想這樣做如下: -是否可以重寫doctrine2持久對象魔術獲得者並設置

public function setDob($dob) 
{ 
    $this->dob= new \Date($date); 
} 

但是我的實體被定義爲: -

使用Doctrine \ COMMON \持久性\持久性對象; 使用Doctrine \ ORM \ Mapping作爲ORM;

/** 
* User 
* 
* @ORM\Table(name="user") 
* @ORM\Entity(repositoryClass="Ajfit\Repository\User") 
* @ORM\HasLifecycleCallbacks 
*/ 
class User extends \Doctrine\Common\Persistence\PersistentObject 
{ 
    /** 
    * @var date $dob 
    * 
    * @ORM\Column(name="dob", type="date") 
    */ 
    protected $dob; 
} 

公共職能setDob當我創建使用實體不會被調用: -

public function getNewRecord() { 
    return $this->metadata->newInstance(); 
} 

我得到下面的錯誤: -

Notice:- array to string conversion ...Doctrine\DBAL\Statement.php on line 98 

任何幫助將非常apprieciated 。

感謝

安德魯

+0

爲什麼你擴展'\ Doctrine \ Common \ Persistence \ PersistentObject'? – SMka 2012-01-28 06:20:39

+0

去實體的魔術獲得者和制定者,看到這個博客http://www.doctrine-project.org/blog/a-doctrine-orm-odm-base-class,我應該不是這樣做嗎? – 2012-01-28 11:10:08

回答

1

PersistentObject#__call__call如果定義了setDob方法不會被調用。 你正在做的是通過元數據創建一個新的實例。你在做什麼可能是假設__construct或任何setter/getter應由ORM調用。在通過元數據/水合作用生成元素時,Doctrine避免調用對象上的任何方法(請檢查ClassMetadataInfo#newInstance以瞭解它是如何完成的),因爲它只知道它的字段。 這使您可以完全獨立於教義的邏輯。 關於通知,這是來自Doctrine\DBAL\Statement的完全不同的問題,這表明我可能在查詢中有一些錯誤的參數綁定。這應該分開處理。

相關問題