2012-01-27 8 views
1

doctrine2 persistentobjectマジックgetters \ settersをオーバーライドできるかどうか誰にでも教えてください。doctrine2 persistentobjectマジックゲッターを無効にして設定することが可能です

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

しかし私のエンティティは次のように定義される: - - :私は、以下を行うにはしたいと思います

教義\共通\永続\ PersistentObjectを使用します。 ORMとしてDoctrine \ ORM \ Mappingを使用します。

/** 
* 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だろう。あなたはsetDobメソッドを定義した場合PersistentObject#__call

アンドリュー

+0

'\ Doctrine \ Common \ Persistence \ PersistentObject'を拡張するものについては? – SMka

+0

エンティティの魔法のゲッターとセッターに連絡するには、このブログhttp://www.doctrine-project.org/blog/a-doctrine-orm-odm-base-classを参照してください。 –

答えて

1

__call

おかげで呼び出されません。 ここでは、メタデータを使用して新しいインスタンスを作成しています。あなたはおそらく__constructまたは任意のセッター/ゲッターがORMによって呼び出されるべきであると仮定しています。 Doctrineは、メタデータ/ハイドレーション(それがどのように行われるかを確認するにはClassMetadataInfo#newInstanceにチェックします)を使用してオブジェクトの任意のメソッドを呼び出すことを避けます。 これにより、Doctrineのロジックから完全に独立することができます。 通知については、それはDoctrine\DBAL\Statementからの全く異なる問題です。これは、おそらくクエリで間違ったパラメータバインディングがあることを示唆しています。それは別々に処理する必要があります。

関連する問題