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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top