Pablasso

Guardando varias filas en CakePHP

May 22, 2007

Una característica extraña (¿útil?) de CakePHP es que guarda el índice del último registro guardado automáticamente 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 cómodo en realidad, pero en este caso en particular que tengo varias filas a insertar, no lo es.

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

Esto resultará en que solo se va a crear una fila nueva que se irá actualizando constantemente según tratamos de insertar y quedará con el valor de 'tercero' porque es el último dato.

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

    $datos = array('primero', 'segundo', 'tercero');
    
    foreach ($datos as $dato) {
       $this->data['Modelo']['dato'] = $dato;
       $this->Modelo->save($this->data);
       $this->Modelo->id = false;
    }

¡Voilá!


Juan Pablo OrtizWritten by Juan Pablo Ortiz who lives and works in Guadalajara, Mexico. You should follow him on Twitter