2011-03-22 19 views
9

Deseo obtener los últimos datos del modelo después de haberlos guardado sin hacer otra selección.Cómo obtener los datos del modelo después de guardar (CakePHP)

Actualmente hago esto:

if ($this->Model->save($data)){ 
    $last = $this->Model->find('first',array(
     'conditions' => array('Model.id' => $this->Model->id) 
    ); 
    $last['Model']['dataChangedByBehaviors']; // <-- data I want 
} 

quiero obtener los datos que se encuentra en las devoluciones de llamada modelo o comportamientos sin realizar un descubrimiento adicional.

+0

Puede aclarar, realmente no entiendo lo que está preguntando. – Brian

+1

Quiero obtener datos como $ last en el ejemplo anterior que no necesitan seleccionar la base de datos. – meotimdihia

+0

Por favor, revise nuevamente estas preguntas y respuestas. Tengo la sensación de que todavía no está claro. Y también como hace algún tiempo, ¿lo resolvió usted mientras tanto o cuál fue su solución/alternativa? – hakre

Respuesta

5

Si está buscando una solución como if ($ last = $ this-> Model-> save ($ data)), creo que no existe tal cosa.

Pero se puede ahorrar algo de código usando findById:

if ($this->Model->save($data)){ 
     $last = $this->Model->findById($this->Model->id); 
} 
0

Usted no puede sino una lectura simple es más rápido

$last = $this->Model->read(null,$this->Model->id); 
10

Hay dos situaciones diferentes para su ejemplo:

  • $ data contiene un registro completo de los datos de su modelo. A continuación, puede acceder a los datos $ [ 'Modelo'] [ ''] dataChangeByBehaviors:
if ($this->Model->save($data)){ 
     $data['Model']['dataChangeByBehaviors']; //---- I want get this 
}

lo tanto, aquí la respuesta es: usted ya tiene los datos.

(Nota: Si se trata de un nuevo registro, $ de datos, por supuesto, no contiene la ID, que necesita obtener a partir $ this-> Modelo-> Identificación del Y si va a realizar cualquier cambio en. la devolución de llamada beforeSave(), estos por supuesto no se reflejarán en su $ data).

  • $ de datos contiene solamente ciertos campos que actualice en un registro. Entonces no hay otra manera de obtener el registro completo, aparte de la lectura de la base de datos - que es lo que está haciendo ya y se puede simplificar como se sugiere por Leo:
if ($this->Model->save($data)){ 
     $last = $this->Model->read(null,$this->Model->id); 
     $last['Model']['dataChangeByBehaviors']; //---- I want get this 
}

Así que aquí la respuesta es : No hay forma de obtener los datos sin una solicitud de base de datos.

+0

¡La respuesta más explicativa! –

14

No entiendo por qué las personas que realizan trabajo de parto trabajan. Simplemente use getLastInsertId() función incorporada de CakePHP y está hecho:

$post_id=$this->Post->getLastInsertId(); 
+0

¡Bienvenido a Stack Overflow! ¡Gracias por publicar tu respuesta! Asegúrese de leer detenidamente [Preguntas frecuentes sobre autopromoción] (http://stackoverflow.com/faq#promotion).También tenga en cuenta que * se requiere * que publique un descargo de responsabilidad cada vez que se vincula a su propio sitio/producto. –

Cuestiones relacionadas