nextval con doctrine (postgre)

135 views
Skip to first unread message

Livio López

unread,
Jan 14, 2010, 10:55:08 PM1/14/10
to symfony-es
saludos. alguien podria decirme como obtener el nextval de una
secuencia con doctrine en postgre.. como llamar a la funcion

Livio López

unread,
Jan 17, 2010, 9:06:24 PM1/17/10
to symfony-es
Saludos . todavia no e encontrado la solucion. lo que encontre es la
clase Doctrine_Sequence_Psql que tiene la funcion nextId pero no se
como utilizarla. alguien lo a solucionado??

oyepez003

unread,
Jan 18, 2010, 9:11:13 AM1/18/10
to symfony-es
Trata de la siguiente forma....

try {
$doctrineSequence = new Doctrine_Sequence_Pgsql(); // en tu
caso PostgreSQL
$valorActual = $doctrineSequence->currId
('el_nombre_de_la_sequencia');
$proximoValor = $doctrineSequence->nextId
('el_nombre_de_la_sequencia');
} catch (Exception $e) {
$this->getLogger()->err($e->getMessage());
}

Creo que eso debería funcionar... sino revisa la barra del log de
Symfony para ver que error te devuelve....

Saludos

Omar Yepez
http://www.yepsua.com

Livio López

unread,
Jan 18, 2010, 11:02:56 AM1/18/10
to symfony-es
Saludos. si funciona lo unico que llamarlo asi a la clase de postgres
pues limitaria la portabilidad al cambiar de manejador. pero funciona
perfecto.

ahora no e podido añadir este valor al form que estoy guardando

try {
$doctrineSequence = new Doctrine_Sequence_Pgsql();

$proximoValor = $doctrineSequence->nextId('tabla_id');
echo $proximoValor;

$form->setCampo($proximoValor); // como puedo setear este
valor al formulario que recibo

$tabla = $form->save();
} catch (Doctrine_Validator_Exception $e) { .........

saludos gracias

oyepez003

unread,
Jan 18, 2010, 11:43:45 AM1/18/10
to symfony-es
Pero creo que desde el archivo schema.yml puedes especificar que el
atributo se autoincrementa con una secuencia....

Trata asi a ver

nombre_de_la_tabla:
tu_atributo: { type: integer, required: true, autoincrement: true,
sequence : nombre_de_la_seq }

Creo que así si funcionaria para cualquier BD....

Omar Yepez
http://www.yepsua.com

Livio López

unread,
Jan 18, 2010, 12:12:48 PM1/18/10
to symfony-es
gracias omar . lo probe y no funciono con la modificacion del yml
quedo asi

Correspondencia:
connection: doctrine
tableName: correspondencia
actAs: [Timestampable]
columns:
id:
type: integer(4)
fixed: false
unsigned: false
primary: true
sequence: correspondencia_id
padre_id:
type: integer(4)
fixed: false
unsigned: false
notnull: false
primary: false
grupo_correspondencia:
type: integer(4)
fixed: false
unsigned: false
notnull: true ########################
primary: false
sequence: correspondencia_id ##########################
autoincrement: true ########################


pero no agarra la secuencia

oyepez003

unread,
Jan 18, 2010, 12:56:45 PM1/18/10
to symfony-es
y la opcion autoincrement ......?

Livio López

unread,
Jan 18, 2010, 1:39:11 PM1/18/10
to symfony-es
esta al final el campo que quiero que autoincremente con la secuencia
es grupo_correspondencia.. id ya lo tiene por defecto pero quiero esa
misma secuencia en el otro campo

oyepez003

unread,
Jan 18, 2010, 1:46:57 PM1/18/10
to symfony-es
mmmm el mismo valor de la secuencia en varios campos ya es otra
cosa....

Yo lo que haria es dejar solo el autoincrement en la clave primaria...
y en la clase del objeto haria

setGrupoCorrespondencia(){
$this->grupoCorrespondencia = $this->id;
}

Algo así mas o menos...

Espero haberte dado una idea.

Saludos.

Livio López

unread,
Jan 18, 2010, 1:57:09 PM1/18/10
to symfony-es
milo gracias omar.. chevere ya use algo parecido en la clase del
objeto el problema es que no asigna el ID porque todavia no existe..
el existe es al insertarlo

Livio López

unread,
Jan 18, 2010, 2:12:01 PM1/18/10
to symfony-es

lo que resolvi es eliminar la secuencia en el schema.yml para el campo
id, de tal forma que en la clase del objeto llamo la funcion nextId()
y este lo asigno a ambos campos ID y GRUPO_CORRESPONDENCIA ya que si
no quitaba la secuencia del ID este siempre tendria un valor mayor al
otro campo debido a que al ejecutar el nexdId() que por dentro es un
nextval incrementa la secuencia automaticamente y cuando se inserte
otra ves se incrementaria dando valores diferentes.


gracias omar si encuentro una mejor forma lo publico

Reply all
Reply to author
Forward
0 new messages