No puedo insertar datos en formulario generado por CRUD.

47 views
Skip to first unread message

Pablo Braulio

unread,
Oct 13, 2008, 12:47:54 PM10/13/08
to symfo...@googlegroups.com
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hola a todos.

No puedo insertar datos a una tabla, mediante un formulario generado por
CRUD.

Esta es la tabla (postgresql):

\d clientes
Table "public.clientes"
Column | Type | Modifiers
-
--------+-----------------------+-------------------------------------------------------
id | integer | not null default
nextval('clientes_id_seq'::regclass)
nombre | character varying(50) |
cif | character(9) | not null
Indexes:
"clientes_pkey" PRIMARY KEY, btree (id)

Para generar los formularios he hecho lo siguiente.

symfony generate:app backend
symfony generate:module clientes
symfony propel:build-chema
symfony propel:build-forms
symfony propel:generate-crud backend clientes Clientes

Accedo a http://localhost/proyecto/backend_dev.php/clientes, y puedo ver
el listado de estos.

El caso es que puedo modificarlos y borrarlos, pero en el caso de crear
uno nuevo, me produce el siguiente error:

[PropelException]
Unable to get sequence id. [wrapped: Could not execute query [Native
Error: ERROR: no existe la relación «clientes_seq»] [User Info: SELECT
nextval('clientes_SEQ')]]

Esta es la estructura de la tabla que tengo en schema.yml:

clientes:
_attributes: { idMethod: native }
id: { type: INTEGER, required: true, autoIncrement: true,
primaryKey: true }
nombre: { type: VARCHAR, size: '50' }
cif: { type: CHAR, size: '9', required: true }

Creo que el fallo viene a que la relación que busca debería ser
"clientes_id_seq", no "clientes_SEQ", por eso funciona al hacer un
update y un delete, pero no un insert.

¿Alguien sabe que puedo estar haciendo mal?.
- --
Saludos cordiales.
Pablo.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFI83u6K7lGsMchFswRAnD+AJ4+2Hum8pPEjCCBH0dKM/vADNQsqQCfWvme
nZoINcIrSr/s0ISNuEzvX+c=
=WfgV
-----END PGP SIGNATURE-----

Sergio Fabián Vier

unread,
Oct 13, 2008, 2:57:46 PM10/13/08
to symfo...@googlegroups.com
Hola

2008/10/13 Pablo Braulio <bru...@gmail.com>:
contanos un poco como definiste la tabla en el yml y luego como la creaste.

...pasa que en symfony 1.0 el propel no soporta el tipo de dato
"serial" para poder generar correctamente los campos de las tablas
declarados como "autoincrement" (un campo delcarado como autoincrement
debería generarse como serial y en la estructura debería verse como
"integer nextval('clientes_id_seq'::regclass)" ).
Entonces, propel hace un campo del tipo integer y crea la secuencia de
la tabla con el nombre "clientes_seq" y es el mismo propel el que
maneja el valor de la secuencia incrementándola. Por esto, es que te
tira el error de que no encuentra la secuencia y que puede ser
solucionado fácilmente, pero debés tener algunas precauciones.


--
Sergio Fabián Vier

"Software Libre'' es un asunto de libertad, no de precio.
Para entender el concepto, debes pensar en "libre'' como en "libertad
de expresión'', no como en "cerveza gratis''. "Software Libre'' se
refiere a la libertad de los usuarios para ejecutar, copiar,
distribuir, estudiar, cambiar y mejorar el software.

Filosofía SL.

Pablo Braulio

unread,
Oct 13, 2008, 3:30:47 PM10/13/08
to symfo...@googlegroups.com
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

> contanos un poco como definiste la tabla en el yml y luego como la creaste.

> ...pasa que en symfony 1.0 el propel no soporta el tipo de dato
> "serial" para poder generar correctamente los campos de las tablas
> declarados como "autoincrement" (un campo delcarado como autoincrement
> debería generarse como serial y en la estructura debería verse como
> "integer nextval('clientes_id_seq'::regclass)" ).
> Entonces, propel hace un campo del tipo integer y crea la secuencia de
> la tabla con el nombre "clientes_seq" y es el mismo propel el que
> maneja el valor de la secuencia incrementándola. Por esto, es que te
> tira el error de que no encuentra la secuencia y que puede ser
> solucionado fácilmente, pero debés tener algunas precauciones.

Hola.

Yo estoy usando la versión 1.1.4, no la 1.0.

El schema.yml se ha generado al ejecutar symfony propel:build-schema. No
lo he creado yo manualmente.

Como ya he dicho en un mensaje posterior he generado un xml con symfony
propel:build-schema --xml y entonces ha funcionado.

¿Hay alguna otra forma de solucionarlo?.

Muchas gracias por el comentario.


- --
Saludos cordiales.
Pablo.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFI86HnK7lGsMchFswRAgU0AKCP3W3uE2BqGUnpjfacEAJYto85WgCfZOE+
y3G/E3QesJgQOGeZWG720Cw=
=4kvr
-----END PGP SIGNATURE-----

Pablo Braulio

unread,
Oct 13, 2008, 5:42:05 PM10/13/08
to symfo...@googlegroups.com
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

> contanos un poco como definiste la tabla en el yml y luego como la creaste.

> ...pasa que en symfony 1.0 el propel no soporta el tipo de dato
> "serial" para poder generar correctamente los campos de las tablas
> declarados como "autoincrement" (un campo delcarado como autoincrement
> debería generarse como serial y en la estructura debería verse como
> "integer nextval('clientes_id_seq'::regclass)" ).
> Entonces, propel hace un campo del tipo integer y crea la secuencia de
> la tabla con el nombre "clientes_seq" y es el mismo propel el que
> maneja el valor de la secuencia incrementándola. Por esto, es que te
> tira el error de que no encuentra la secuencia y que puede ser
> solucionado fácilmente, pero debés tener algunas precauciones.


¿Lo has solucionado en la versión 1.0.x?.

He instalado la versión 1.0.18 y no se soluciona creando un schema.xml,
al igual que pasa en la versión 1.1.4

- --
Saludos cordiales.
Pablo.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD4DBQFI88CtK7lGsMchFswRAj2kAJi6OOqFWp6YDmJbL7+oiTMY2qqwAJ9X8gdL
3Y4xrYh+Q2DTghZvi5/AXQ==
=MQVU
-----END PGP SIGNATURE-----

Sergio Fabián Vier

unread,
Oct 13, 2008, 7:15:51 PM10/13/08
to symfo...@googlegroups.com
2008/10/13 Pablo Braulio <bru...@gmail.com>:
mira, en la 1.0 lo que hice es definir en el schema.yml las tablas,
usando campos "autoincrement" y genero el sql con symfony, ese mismo
sql tiene las secuencias en la manera en que propel las busca, esto
es: las secuencias se nombran "tabla_seq" y no se crean las tablas con
el tipo de dato serial, si con integer, y no asocia a los campos
autoincrement en las tablas el valor de nextval(tabla_seq).

Asi y todo, funciona correctamente y lo unico malo es que si insertas
datos por fuera de symfony, debes especificar por tus propios medios
el valor del campo "autoincrement" y asegurarte de que esto incremente
la secuencia (sino te provoca problemas de duplicados).

Con lo que te quiero decir es que no definas vos la tabla, usa la
definicion sql que te genera symfony, y si ya no podes hacerlo creo vi
en algun lugar que es posible definir en el schema.yml el nombre de la
secuencia asociado a una tabla. Saludos y espero te sirva!!

Sergio Fabián Vier

unread,
Oct 13, 2008, 7:27:02 PM10/13/08
to symfo...@googlegroups.com
> Yo estoy usando la versión 1.1.4, no la 1.0.
>
> El schema.yml se ha generado al ejecutar symfony propel:build-schema. No
> lo he creado yo manualmente.
>
> Como ya he dicho en un mensaje posterior he generado un xml con symfony
> propel:build-schema --xml y entonces ha funcionado.
>
> ¿Hay alguna otra forma de solucionarlo?.

ya, he mirado el manual [1] y ahi esta como definir el nombre de la
secuencia, asi que creo resta que generes el schema.yml en base al
schema.xml (hay un comando para esto) y agregues al .yml el nombre de
las secuencias correctas.


[1] http://www.librosweb.es/symfony/capitulo8/sintaxis_extendida_del_esquema.html

Pablo Braulio

unread,
Oct 14, 2008, 2:43:22 AM10/14/08
to symfo...@googlegroups.com
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

> ya, he mirado el manual [1] y ahi esta como definir el nombre de la


> secuencia, asi que creo resta que generes el schema.yml en base al
> schema.xml (hay un comando para esto) y agregues al .yml el nombre de
> las secuencias correctas.
>
>
> [1] http://www.librosweb.es/symfony/capitulo8/sintaxis_extendida_del_esquema.html

Muchas gracias por la ayuda.

Así es como lo he solucionado finalmente.


- --
Saludos cordiales.
Pablo.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFI9D+JK7lGsMchFswRAkOXAKCEtyvp8TZeiIU+U+0PIw/iBH/hKgCePeoD
SethutuZiUrFt+qvZXVSyaY=
=zF1v
-----END PGP SIGNATURE-----

Reply all
Reply to author
Forward
0 new messages