Sigueme en Twitter
«Anterior | Siguiente»

Guardando varias filas en CakePHP

22/05/2007

Una característica extraña (util?) de CakePHP es que guarda el indice de el ultimo registro guardado automaticamente en $this->Model->id y como bien sabemos, cuando insertas algo en un modelo, que trae seteada una id que ya existe, actualiza los datos en lugar de insertar unos nuevos.

Es muy comodo en realidad, pero en este caso en particular que tengo varias filas a insertar, no lo es.

1
2
3
4
5
6
$datos = array('primero', 'segundo', 'tercero');
 
foreach ($datos as $dato) {
  $this->data['Modelo']['dato'] = $dato;
  $this->Modelo->save($this->data);
}

Esto resultara en que solo se va a crear una fila nueva que se ira actualizando constantemente segun tratamos de insertar y quedara con el valor de ‘tercero’ porque es el último dato.

Para solucionar esto hay que destruir el índice que crea despues de cada inserción.

1
2
3
4
5
6
7
$datos = array('primero', 'segundo', 'tercero');
 
foreach ($datos as $dato) {
   $this->data['Modelo']['dato'] = $dato;
   $this->Modelo->save($this->data);
   $this->Modelo->id = false;
}

Voilá!


Hay 3 comentarios:

  1. 23/07/2007Jorge dice:

    Gracias por el dato, muy bueno

  2. 13/03/2008Martin Bavio dice:

    $this->Modelo->create() soluciona este asunto de una forma mas elegante. Saludos.

  3. 13/03/2008pablasso dice:

    Muy cierto Martin, gracias por mencionarlo!

Escribe tu comentario:

¿Escribiste código?


  Los mas frikis pueden suscribirse a los comentarios por RSS.