Doctrine 2でデフォルト値を設定するにはどうすればいいですか?
データベースのデフォルト値は、移植可能な形でサポートされていません。データベースのデフォルト値を使用する唯一の方法は、マッピング属性の columnDefinition で、フィールドがマッピングされるカラムの SQL スニペット (DEFAULT を含む) を指定することです。
columnDefinition
SQL
DEFAULT
使うことができます。
<?php /** * @Entity */ class myEntity { /** * @var string * * @Column(name="myColumn", type="string", length="50") */ private $myColumn = 'myDefaultValue'; ... }
PHP レベルのデフォルト値は、新しく作成され永続化されたオブジェクトでも適切に利用できるので、好ましいものです (Doctrine は新しいオブジェクトを永続化した後でデフォルト値を取得するためにデータベースに戻ることはありません)。
エンティティにコンストラクタを設定し、そこでデフォルト値を設定します。
私が使った回避策は、LifeCycleCallbackでした。例えば、@Column(type="string", default="hello default value")のような、より多くの"native"メソッドがあるかどうか、まだ確認中です。
LifeCycleCallback
@Column(type="string", default="hello default value")
/** * @Entity @Table(name="posts") @HasLifeCycleCallbacks */ class Post implements Node, \Zend_Acl_Resource_Interface { ... /** * @PrePersist */ function onPrePersist() { // set default date $this->dtPosted = date('Y-m-d H:m:s'); }
データベースのデフォルト値は、移植可能な形でサポートされていません。データベースのデフォルト値を使用する唯一の方法は、マッピング属性の
columnDefinition
で、フィールドがマッピングされるカラムのSQL
スニペット (DEFAULT
を含む) を指定することです。使うことができます。
PHP レベルのデフォルト値は、新しく作成され永続化されたオブジェクトでも適切に利用できるので、好ましいものです (Doctrine は新しいオブジェクトを永続化した後でデフォルト値を取得するためにデータベースに戻ることはありません)。
エンティティにコンストラクタを設定し、そこでデフォルト値を設定します。
私が使った回避策は、
LifeCycleCallback
でした。例えば、@Column(type="string", default="hello default value")
のような、より多くの"native"メソッドがあるかどうか、まだ確認中です。