mysql con timestamp

103 views
Skip to first unread message

micayael

unread,
Mar 17, 2008, 8:15:59 PM3/17/08
to symfony-es
Hola amigos.

Estoy tratando de usar el synfomy con mysql pero cuando agrego el
created_at y updated_at como timestamp el mysql setea los valores
CURRENT_TIMESTAMP al primero y 0000-00-00 00:00:00 al segundo. No me
permite modificarlo y lo peor de todo es que al hacer el propel build
schema me sale el error failed for the following reason: D:\symfony\lib
\vendor\propel-generator\build-propel.xml:470:1: Unable to parse
default value as date/time value: '0000-00-00 00:00:00'

Alguien entiende esto?

Cristian Zanier

unread,
Mar 17, 2008, 10:39:43 PM3/17/08
to symfo...@googlegroups.com
Hola micayael
Primero, en mysql cuando tenes 2 campos TIME, podes definir que
solamente uno de ellos pueda ser actualizado mediante CURRENT_TIMESTAMP
y el segundo recibira el valor NULL o '0000-00-00 00:00:00'.
Segundo, el ORM de Symfony (Propel v1.2) no puede manejar constantes de
MySql como CURRENT_TIMESTAMP, por eso en el momento de crear los modelos
no puede parsear esa constante.
Para un mejor detalle, podes publicar tu schema.yml asi vemos con
detalle donde esta fallando el parseo.

Saludos
CZ

micayael

unread,
Mar 17, 2008, 11:23:59 PM3/17/08
to symfony-es
Gracias Cristian.

La verdad que al crear la tabla en el phpMyAdmin poniendo las columnas
created_at y updated_at como TIMESTAMP, él solo añade el
CURRENT_TIMESTAMP y el 0000-00-00 00:00:00 y por más que lo intente
sacar lo vuelve a grabar así. al ejecutar el propel build schema
genera el siguiente schema

propel:
articulo:
_attributes:
idMethod: native
id:
type: INTEGER
required: true
autoIncrement: true
primaryKey: true
descripcion:
type: VARCHAR
size: 100
required: true
default:
cantidad:
type: INTEGER
required: true
default:
precio:
type: INTEGER
required: true
default:
cantidad_visitas:
type: INTEGER
required: true
default: 0
oferta:
type: CHAR
size: 1
required: true
default: N
tipo_venta:
type: CHAR
size: 1
required: true
default: S
estado_codigo:
type: CHAR
size: 1
required: true
default: I
created_at:
type: TIMESTAMP
required: true
default: CURRENT_TIMESTAMP
updated_at:
type: TIMESTAMP
required: true
default: 0000-00-00 00:00:00

y al ejecutar el propel build model genera el siguiente error

[propel-om] - processing database : propel
[propel-om] + articulo
[propel-om] -> BaseArticuloPeer [builder: SfPeerBuilder]
[propel-om] -> BaseArticulo [builder: SfObjectBuilder]
Execution of target "om-template" failed for the following reason: D:
\symfony\lib\vendor\propel-generator\build-propel.xml:470:1: Unable to
parse default value as date/time value: 'CURRENT_TIMESTAMP'

Cristian Zanier

unread,
Mar 17, 2008, 11:33:28 PM3/17/08
to symfo...@googlegroups.com
micayael
Claro, tienes el problema en el schema.yml, propel no puede
reconocer la constante CURRENT_TIMESTAMP

created_at:
type: TIMESTAMP
required: true
default: CURRENT_TIMESTAMP
updated_at:
type: TIMESTAMP
required: true
default: 0000-00-00 00:00:00

deberia ser de la siguiente forma

created_at:
type: TIMESTAMP
required: true

default: '0000-00-00 00:00:00'


updated_at:
type: TIMESTAMP
required: true

default: '0000-00-00 00:00:00'
asi propel lo puede entender, luego si quieres poder actualizar la fecha cuando se modifica un registro o cuando se crea,
deberias hacerlo manualmente extendiendo el metodo "save" del ORM en cuestion

Saludos
CZ

micayael

unread,
Mar 18, 2008, 7:19:28 AM3/18/08
to symfony-es
OK gracias amigo.

La verdad que es bastante desagradable toparse con esto en mySQL. El
EMS para mySQL por ejemplo agrega esos valores por default y despues
te dice que no lo logra reconocer y tengo que terminar volviendo al
phpMyAdmin para tratar de solucionarlo

Agustin Casiva

unread,
Aug 5, 2009, 9:20:25 AM8/5/09
to symfo...@googlegroups.com
Despues de Googlear bastante me encontre con esto:

http://trac.symfony-project.org/ticket/264

Es una alternativa muy viable para tratar los CURRENT_TIMESTAMP, la clave esta en declarar defaultExpr en vez de default, de esa manera se puede poner la expresión que deseen y será parseada correctamente al generar el modelo. Por ejemplo

defaultExpr: CURRENT_TIMESTAMP

Saludos

2008/3/18 micayael <mica...@gmail.com>



--
Ing. Casiva  Agustin

Mail/Msn/GTalk/Jabber: casiva...@gmail.com
Skype: casivaagustin
CEL : 054-03722-15270639
Site: http://www.casivaagustin.com.ar

Reply all
Reply to author
Forward
0 new messages