La
automagia también tiene su lado oscuro, normalmente cuando se desconoce el uso de la misma. Esta vez se trataba de guardar en un
log detalles de transacción de un
user justo al finalizar la operación. Supuse que sería un sencillo
save() con los parámetros apropiados. Según vemos en la
API, su sintaxis es primitiva:
Model::save ($data = null,
$validate = true,
$fieldList = array()
)
array $data Data to save.
boolean $validate If set, validation will be done before the save
array $fieldList List of fields to allow to be written
Con los controladores relacionados mediante la variable
uses (
var $uses = array('Modelo2', 'Modelo3')) la intuición trataría de hacer el resto:
$this->Modelo2->save
(
array($this->Session->read('s_status'), $this->Session->read('s_id')),
true,
array('transaccion','user_id')
);
Dentro del controlador de
Modelo1 intento grabar datos en
Modelo2, siguiendo la documentación he enviado los tres parámetros correspondientes pero aún así el
framework escupe un error de lo más extraño:
Query: INSERT INTO `model2` (*) VALUES ('transaccion')
Variando las pruebas e intentando no precipitarme llego a la conclusión que
save() requiere que el array de datos sea en forma de
$this->data para que funcione:
$this->data['Modelo2']['transaccion'] = $this->Session->read('s_status');
$this->data['Modelo2']['user_id'] = $this->Session->read('s_id');
$this->Modelo2->save($this->data);
Interesante conclusión después de más de 2 horas de pruebas y lecturas de
API. Es lo malo de
CakePHP, la documentación brilla por su ausencia y cuando la encuentras te das cuenta del caos interno.
Actualización: Insert vs Update
Otro pequeño
tip dentro de la misma función. Dependiendo de los valores que se pasen en
$this->data el comportamiento de
save() será uno u otro. En otras palabras, si le pasamos un
id hará
update del registro, sino hace un
insert, con lo que -a lo mejor- interesa meter en el formulario algo así:
$form->hidden('id');
Nunca te acostarás...
Comentarios
Saludos
Sos un idolo , mil gracias , aprendi a hacer INSERT INTO y UPDATE !!!!GENIO!!!!! APB