relación actualización hasOne comporta de forma extraña (cakephp)
-
19-09-2019 - |
Pregunta
Tengo un escaparate existente que hasOne
Galería.
La Galería ya existe con el showcase_id
foreignKey establecido en el valor adecuado.
La galería cuenta con un campo de texto que intento actualizar a través de la Muestra-controlador.
El resultado que se ve es una entrada adicional Galería, paralelamente al original, en lugar de una actualización de la entrada original.
¿Qué estoy haciendo mal?
Mi Escaparate-vista se ve de la siguiente manera:
echo $form->create('Showcase', array('action'=>'update'));
echo $form->input('Showcase.id', array('type'=>'hidden', 'value'=>$showcase['Showcase']['id']));
echo $form->input('Gallery.fulltext', array('type'=>'textarea', 'between'=>'<br>', 'value'=>$showcase['Gallery']['fulltext']));
echo $form->submit('Submit text');
echo $form->end();
Mi función Showcase-controlador:
$uses = array('Showcase','Gallery')
function update(){
if(!empty($this->data)){
$this->Showcase->saveAll($this->data, array('validate'=>'first'));
}
}
El modelo Showcase $hasOne = 'Gallery'
y la Galería modelo $belongsTo = 'Showcase'
.
Se $this->Showcase->saveAll()
la función correcta de usar aquí? O es que tal vez necesito para actualizar la entrada Galería dentro del controlador Gallery? Eso probablemente va a funcionar, pero es que parece tan poco elegante.
Solución
Puedo ver lo que quiere decir por ser no-elegante, que sería bueno si se dio cuenta de que tenía una relación hasOne informado y por lo tanto cualquier registro existente.
Sin embargo actualmente en el marco Creo que la mejor opción sería añadir echo $form->input('Gallery.id', array('type'=>'hidden', 'value'=>$showcase['Gallery']['id']));
a la vista.
Como nota al margen. En la acción del controlador que está definiendo actualmente $showcase
si en lugar de asignarlo a $this->data
entonces no tendrá que especificar siempre 'value' => ...
en sus entradas de formulario.