Too Cool for Internet Explorer

Model save

Hora y Fecha: Mayo 4, 2006 @ 8:28 pm Autor: Moisés Maciá
Categorías:
464 views

En CakePHP cada modelo de datos tiene un método save que justamente “lo salva” en la base de datos, hasta aquí todo correcto.

El problema es el comportamiento que presenta este método cuando lo empleamos para “guardar en cascada” varios registros del mismo modelo. Ejemplo:

  1.  
  2. foreach($items as $item)
  3. {
  4.    $this->MyModel->save($item);
  5. }
  6.  

Si tenemos 5 items para guardar en el array, finalmente en la base de datos sólo veremos el último debido a que el índice interno que maneja el modelo no se incrementa (primero hace un INSERT y a continuación UPDATEs). Esto no se avisa en el API y Moisés casi se vuelve loco toda la mañana dándole vueltas …

¿Solución?, incrementar el índice de manera digital (a dedo):

  1.  
  2. foreach($items as $item)
  3. {
  4.    $this->MyModel->save($item);
  5.    $this->MyModel->id += $this->MyModel->getLastInsertID();
  6. }
  7.  

Y la vida vuelve a ser bella …

PD. Descubrí en fallo gracias a los logs de MySQL. Se puede especificar que lleve un registro de todas las sentencias SQL que le llegan a la BD.





« Anterior post: CakePHP 1.0 | Próximo post: Forum Filatélico »

Los comentarios estan cerrados.


Bad Behavior has blocked 313 access attempts in the last 7 days.