Valor por defecto en Doctrine

¿Cómo puedo establecer un valor por defecto en Doctrine 2?

Solución

Los valores por defecto de la base de datos no son "portables" soportados. La única manera de utilizar los valores por defecto de la base de datos es a través del atributo de asignación columnDefinition donde se especifica el fragmento SQL (causa DEFAULT inclusive) para la columna a la que se asigna el campo.

Se puede utilizar:

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

Se prefieren los valores por defecto a nivel de PHP, ya que estos también están disponibles correctamente en los objetos recién creados y persistidos (Doctrine no volverá a la base de datos después de persistir un nuevo objeto para obtener los valores por defecto).

Comentarios (10)

Configure un constructor en su entidad y establezca allí el valor por defecto.

Comentarios (6)

La solución que utilicé fue un LifeCycleCallback. Todavía estoy esperando a ver si hay algún método más "nativo", por ejemplo @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');
}
Comentarios (2)