Doctrine 2でデフォルト値を設定するにはどうすればいいですか?
データベースのデフォルト値は、移植可能な形でサポートされていません。データベースのデフォルト値を使用する唯一の方法は、マッピング属性の 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"メソッドがあるかどうか、まだ確認中です。
/**
* @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');
}