Obtener el identificador de un registro recién guardado

2,430 views
Skip to first unread message

jordicakephp

unread,
Apr 8, 2009, 5:04:15 AM4/8/09
to CakePHP en Español
Buenas grupo,

Estoy en un programa en el que necesito hacer lo siguiente:

El usuario graba un nuevo registro en una tabla, llamémosle A. A
continuación, el programa tiene que obtener el identificador de ese
registro nuevo para guardar ese valor en la clave externa de otra
tabla, digamos B. Pues bien, ¿cómo se haría esto correcamente?

Yo lo estoy haciendo así: primero guardo el registro A con saveAll, y,
a continuación, obtengo el identificador. Una vez obtenido, ya puedo
guardarlo en el campo de la otra tabla. Mi duda está en que si en este
proceso siempre se obtendría efectivamente el identificador del último
registro y si no tenemos que tener en cuenta la concurrencia. Gracias
de antemano y un saludo. Jordi

david hc

unread,
Apr 8, 2009, 5:13:31 AM4/8/09
to cakep...@googlegroups.com
$this->Modelo->save($data);

$id_recien_guardado = $this->Modelo->id;

Saludos,
David.

2009/4/8 jordicakephp <jordic...@gmail.com>:

jordicakephp

unread,
Apr 8, 2009, 5:28:03 AM4/8/09
to CakePHP en Español
Muchas gracias, David.

Supongo que con esto nos tenemos que olvidar de la concurrencia,
cierto? Qué pasaría si, por ejemplo, entre

$this->Modelo->save($data);

y

$id_recieng_guardado = $this->Modelo->id;

Otro usuario guardara un registro en la base de datos? En ese caso,
$this->Modelo->id devolvería el identificador del registro que insertó
ese otro usuario, cierto? ¿Quien se encarga de que esto no suceda? Las
tablas de esta aplicación son MyISAM... Saludos de nuevo.

On 8 abr, 11:13, david hc <davi...@gmail.com> wrote:
> $this->Modelo->save($data);
>
> $id_recien_guardado = $this->Modelo->id;
>
> Saludos,
> David.
>
> 2009/4/8 jordicakephp <jordicake...@gmail.com>:
>
>
>
>
>
> > Buenas grupo,
>
> > Estoy en un programa en el que necesito hacer lo siguiente:
>
> > El usuario graba un nuevo registro en una tabla, llamémosle A. A
> > continuación, el programa tiene que obtener el identificador de ese
> > registro nuevo para guardar ese valor en la clave externa de otra
> > tabla, digamos B. Pues bien, ¿cómo se haría esto correcamente?
>
> > Yo lo estoy haciendo así: primero guardo el registro A con saveAll, y,
> > a continuación, obtengo el identificador. Una vez obtenido, ya puedo
> > guardarlo en el campo de la otra tabla. Mi duda está en que si en este
> > proceso siempre se obtendría efectivamente el identificador del último
> > registro y si no tenemos que tener en cuenta la concurrencia. Gracias
> > de antemano y un saludo. Jordi- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

david hc

unread,
Apr 8, 2009, 5:30:39 AM4/8/09
to cakep...@googlegroups.com
$this->Modelo->campo devuelve el campo del objeto actual, no del
ultimo insertado. AL hacer un save, tu objeto actual es el que has
guardado, aunque no sea el ultimo.

Saludos,
David.

2009/4/8 jordicakephp <jordic...@gmail.com>:
>

Gotzon Astondoa

unread,
Apr 8, 2009, 7:19:12 AM4/8/09
to cakep...@googlegroups.com
Prueba  $this->modelo->getLastInsertID();

david hc

unread,
Apr 8, 2009, 7:39:31 AM4/8/09
to cakep...@googlegroups.com
2009/4/8 Gotzon Astondoa <gast...@gmail.com>:
> Prueba  $this->modelo->getLastInsertID();

Eso SÍ devuelve el último ID insertado, no el que acabas de insertar.
Creo que eso es lo que no quería...

Saludos,
David.

Dardo Sordi Bogado

unread,
Apr 8, 2009, 7:42:14 AM4/8/09
to cakep...@googlegroups.com
> Supongo que con esto nos tenemos que olvidar de la concurrencia,
> cierto? Qué pasaría si, por ejemplo, entre
>
> $this->Modelo->save($data);
>
> y
>
> $id_recieng_guardado = $this->Modelo->id;

Bueno, eso depende de la base de datos. Supongamos MySQL.

Al hacer un insert, Cake obtiene $this->Modelo->id de
Model::getLastInsertID(), que según la doumentación de MySQL
(http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html)

Using LAST_INSERT_ID() and AUTO_INCREMENT columns simultaneously from
multiple clients is perfectly valid. Each client will receive the last
inserted ID for the last statement that client executed.

Asi que no tienes que preocuparte por la concurrencia.

Saludos,
- Dardo.

jordicakephp

unread,
Apr 8, 2009, 7:42:50 AM4/8/09
to CakePHP en Español
Muchas gracias, Gotzon.

Si hago esto... ¿es seguro que el id que obtengo es el del último
registro que ha generado el usuario actual? Parece que con este método
uno obtiene el identificador del último registro, sin importar quien
lo generó. A mi me gustaría obtener el identificador del registro que
acaba de generar el usuario actual sin que haya ninguna posiblidad de
que el programa recupere el identificador del registro que haya podido
generar otro usuario. Saludos!!

On 8 abr, 13:19, Gotzon Astondoa <gaston...@gmail.com> wrote:
> Prueba  $this->modelo->getLastInsertID();
>
> El 8 de abril de 2009 11:30, david hc <davi...@gmail.com> escribió:
>
>
>
>
>
> > $this->Modelo->campo devuelve el campo del objeto actual, no del
> > ultimo insertado. AL hacer un save, tu objeto actual es el que has
> > guardado, aunque no sea el ultimo.
>
> > Saludos,
> > David.
>
> > 2009/4/8 jordicakephp <jordicake...@gmail.com>:
> > >> - Mostrar texto de la cita -- Ocultar texto de la cita -

Dardo Sordi Bogado

unread,
Apr 8, 2009, 7:45:19 AM4/8/09
to cakep...@googlegroups.com
Jordi, me da la impresión de que no estas leyendo...

2009/4/8 jordicakephp <jordic...@gmail.com>:

Joaquin Windmüller

unread,
Apr 8, 2009, 9:16:48 AM4/8/09
to cakep...@googlegroups.com
GetLastInserID devuelve el ultimo ID insertado con la conexion actual.

2009/4/8 Dardo Sordi Bogado <dardo...@gmail.com>

David Riveros

unread,
Apr 8, 2009, 10:14:51 AM4/8/09
to cakep...@googlegroups.com
Jordi lee bien porfavor, David hc dió en el clavo.

cuando haces $this->Model->save($data), lo que haces es insertar un registro y el mismo insert devuelve el id insertado, este insert es guardado en esa instancia del objeto, con lo que puedes capturarlo con $this->Model->id , que será si o si el id del registro que esta instancia de modelo generó.

Espero que ahora si te quede claro.

Saludos.

David Alejandro Riveros Fonseca
Cel 81218362


2009/4/8 Joaquin Windmüller <joaqu...@gmail.com>

jordicakephp

unread,
Apr 8, 2009, 10:34:12 AM4/8/09
to CakePHP en Español
Por favor, no pongáis en duda mi capacidad de comprensión lectora y
abrid vuestras mentes programáticas de tipo convergente. También puede
pasar que no me fie a la primera, ¿no? Vosotros mismos decís que no
hay que fiarse de lo primero que le digan a uno.

0101001001, gracias por la ayuda.

http://deakialli.bitacoras.com/archivos/2005/04/24/la-dominacion-del-pensamiento-convergente

http://es.wikipedia.org/wiki/L%C3%B3gica_difusa



On 8 abr, 13:45, Dardo Sordi Bogado <dardoso...@gmail.com> wrote:
> Jordi, me da la impresión de que no estas leyendo...
>
> 2009/4/8 jordicakephp <jordicake...@gmail.com>:

Nachopitt

unread,
Apr 8, 2009, 11:26:23 AM4/8/09
to cakep...@googlegroups.com
Si no te convence lo que aquí te dicen, entonces por que recurres al foro?

2009/4/8 jordicakephp <jordic...@gmail.com>



--
Ignacio Alberto Zamora Esqueda
Ingeniero de Software
Corporación Tectronic, S.A. De C.V.
Tels: (33) 3615-44-11 y 36-15-45-11
Fax: (33) 3615-46-11
sist...@tectronic.com.mx
www.tectronic.com.mx

Joaquin Windmüller

unread,
Apr 8, 2009, 11:39:26 AM4/8/09
to cakep...@googlegroups.com
Nacho, eso no era necesario. Si a alguien no le parece el diagnostico de un doctor (o simplemente quiere confirmar el diagnostico), no tiene derecho a obtener una segunda opinion?

Nadie esta reclamando su tiempo perdido.

Saludos

2009/4/8 Nachopitt <nach...@gmail.com>

Nachopitt

unread,
Apr 8, 2009, 12:08:50 PM4/8/09
to cakep...@googlegroups.com
Me disculpo, jordicakephp. Perdón.

2009/4/8 Joaquin Windmüller <joaqu...@gmail.com>

jordicakephp

unread,
Apr 8, 2009, 12:16:50 PM4/8/09
to CakePHP en Español
Nacho, ¿de dónde sacas que toda respuesta es válida si, y sólo si,
pertenece al foro?

Existe almenos una que no lo es, y, por lo tanto, hay lugar para la
duda. En consecuencia, a veces (sólo a veces) no me convence lo que
aquí me dicen, pero esa no es una condición suficiente para no
recurrir al foro, sino necesaria. Es por eso que recurro al foro.

¿De dónde se infiere que cualquier respuesta puede ser válida?

On 8 abr, 17:26, Nachopitt <nachop...@gmail.com> wrote:
> Si no te convence lo que aquí te dicen, entonces por que recurres al foro?
>
> 2009/4/8 jordicakephp <jordicake...@gmail.com>
>
>
>
>
>
>
>
> > Por favor, no pongáis en duda mi capacidad de comprensión lectora y
> > abrid vuestras mentes programáticas de tipo convergente. También puede
> > pasar que no me fie a la primera, ¿no? Vosotros mismos decís que no
> > hay que fiarse de lo primero que le digan a uno.
>
> > 0101001001, gracias por la ayuda.
>
> >http://deakialli.bitacoras.com/archivos/2005/04/24/la-dominacion-del-...
> siste...@tectronic.com.mxwww.tectronic.com.mx- Ocultar texto de la cita -

jordicakephp

unread,
Apr 8, 2009, 12:23:46 PM4/8/09
to CakePHP en Español
Disculpad,

Me equivoqué en la formulación de mi última pregunta y quería decir,
ejem: ¿De dónde se infiere que cualquier respuesta debe ser válida,
Nacho? jeje. Saludos y sigo trabajando!!
> > siste...@tectronic.com.mxwww.tectronic.com.mx-Ocultar texto de la cita -

Nelson González

unread,
Apr 8, 2009, 12:26:06 PM4/8/09
to cakep...@googlegroups.com
Eso es lo mejor jordi, siga trabajando y si tiene alguna duda sobre cake, creo que hay varios que estarán dispuestos a responder.

saludos.
--
Nelson González Arenas


2009/4/8 jordicakephp <jordic...@gmail.com>

david hc

unread,
Apr 8, 2009, 5:53:29 PM4/8/09
to cakep...@googlegroups.com
Jordi de ningún lado. Pero entiende que la siguiente vez quizá no me
tome la molestia. No quiero decir que sea así, ni a mi me molesta que
se pregunte de nuevo, pero en mi caso si contesto es porque estoy
seguro de la respuesta (que puede no ser la única).

Un saludo,
David.

2009/4/8 jordicakephp <jordic...@gmail.com>:

Reply all
Reply to author
Forward
0 new messages