2012-02-06 12 views
5

Aquí está la definición de mi tabla para el esquema de Propel. La columna modified tiene timestamp tipo (DateTime en PHP) y me gustaría asignar un valor predeterminado a ahora. He tratado de establecer que "ahora", pero estoy recibiendo un error al usar propel-gen insert-sql comando:¿Cómo se especifica defaultValue a "ahora" para una columna de marca de tiempo en Propel?

"Syntaxt error o violación de acceso:. 1067 valor predeterminado no válido para 'modificado'

alguien sabe cómo puedo fijar el valor por defecto de ahora para una columna de marca de tiempo en Propel?

<table name="mashup_setting"> 
    <!-- omitted previous column definition --> 
    <column name="modified" type="timestamp" required="true" defaultValue="now" /> 
</table> 

Respuesta

5

Cambiar el nombre a "updated_at", que es un campo especial en Propel que automáticamente se actualiza a NOW() cada vez que se actualice el campo. "created_at" también es similar y hará lo mismo cuando se crea su objeto.

En su modelo, siempre puede realizar un proxy "modified" o getModified() para getUpdatedAt() para completar su funcionalidad.

Si tiene que haber "modificado" como el nombre de su columna, necesita escribir un comportamiento, que creo que es más trabajo que necesita para lograr esto. Puede encontrar información sobre comportamientos aquí.

http://www.symfony-project.org/cookbook/1_2/en/behaviors

11

En las versiones más recientes de Propel se puede especificar que la columna de este modo:

<column name="created" type="TIMESTAMP" defaultExpr="CURRENT_TIMESTAMP" /> 

Es entonces cuando compatibles cruz-db.

+0

¡Esta debería ser la respuesta aceptada, ya que es más precisa! – tmuecksch

+0

De acuerdo, esto es más preciso y debería ser la respuesta aceptada –

2

Los documentos en http://propelorm.org/behaviors/timestampable.html no especifican si esto está disponible en 1.6, pero se suman a este esquema y se acumulan:

<behavior name="timestampable" /> 

El modelo tiene ahora dos nuevas columnas, created_at y updated_at, que almacenan una marca de tiempo de forma automática actualizado en guardar:

$obj->save(); 
echo $obj->getCreatedAt(); // 2009-10-02 18:14:23 
echo $obj->getUpdatedAt(); // 2009-10-02 18:14:25 
+1

¡Buena respuesta, gracias! –

Cuestiones relacionadas