Doctrineのデフォルト値

Doctrine 2でデフォルト値を設定するにはどうすればいいですか?

ソリューション

データベースのデフォルト値は、移植可能な形でサポートされていません。データベースのデフォルト値を使用する唯一の方法は、マッピング属性の columnDefinition で、フィールドがマッピングされるカラムの SQL スニペット (DEFAULT を含む) を指定することです。

使うことができます。

<?php
/**
 * @Entity
 */
class myEntity {
    /**
     * @var string
     *
     * @Column(name="myColumn", type="string", length="50")
     */
    private $myColumn = 'myDefaultValue';
    ...
}

PHP レベルのデフォルト値は、新しく作成され永続化されたオブジェクトでも適切に利用できるので、好ましいものです (Doctrine は新しいオブジェクトを永続化した後でデフォルト値を取得するためにデータベースに戻ることはありません)。

解説 (10)

エンティティにコンストラクタを設定し、そこでデフォルト値を設定します。

解説 (6)

私が使った回避策は、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');
}
解説 (2)