CakePHP: save() - Userlinux.net

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…

CakePHP: save()

27.Dec.2007 ~ 4 Comentarios ~ 2926 Lecturas
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...
Categorías: programación

Comentarios


gravatar
27.Dec.2007
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"

gravatar
27.Dec.2007
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.

gravatar
neojoda
17.Mar.2009
Lo que me parece bastante horrendo, es que para hacer un update no se use la misma estructura de data para save, y encima haya que sobreescribir la funciona update para poner ' ' a los valores antes de hacer realmente el update.
Saludos

gravatar
05.Sep.2011
GENIO !!!! en la documentacion en aspectos de Insert Into le dedica una sola pagina .
Sos un idolo , mil gracias , aprendi a hacer INSERT INTO y UPDATE !!!!GENIO!!!!! APB

Comentarios


Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 15 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Buscar

Cargando...

Últimos comentarios

  • Juan
  • Marina
  • Francisco
  • fon
  • minWi
  • isra
  • reidrac
  • r0sk
  • Rodrigo Rega
  • minWi
  • r0sk
  • reidrac
  • r0sk
  • deady
  • errece

Moneting

Valor de mi cuenta de Facebook según Moneting
Valor de mi cuenta de Twitter según Moneting

Tagcloud

ssh frases champions userlinux iphone lugo rsidenotes felicidades films nintendo opinion sysadmin 2008 blogsfera vacaciones juegos cake ds debian sidenotes apple web blogs mac mysql cakephp deportes 2007 mundial openbsd barça ubuntu twitter blog humor meme canción alemania_2006 games bsd lucux linux twitt programación cumpleaños software django league bash macosx ps3 rfilms conciertos freebsd seguridad personal hack php bake futbol

Archivo

Social

Enlaces de interés