CakePHP: save()
27.dic 2007
Envía un trackback
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 writtenCon 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
La documentación tal vez no se de lo mejor, sin embargo el punto al que te refieres está muy claro en el capitulo de Modelo (http://manual.cakephp.org/chapter/models) en el titulo "Saving Your Data"
Entre las prisas y las búsquedas se me había pasado por completo mirar ahí. Me da que todavía tengo un par de lecturas pendientes.
Escribe tu comentario
Intenta que tu comentario sea interesante y con información relevante al tema de la entrada. BBCodes disponibles:
[url=http://direccion]texto[/url], negrita: [b]texto[/b],
itálica: [i]texto[/i], subrayada: [u]texto[/u].
Para mencionar o citar a alguien (quote): [cita]texto[/cita]


