2010-01-10 6 views
2

J'ai une vitrine existante hasOne Galerie. La galerie existe déjà avec la clé étrangère showcase_id définie sur la valeur appropriée. La galerie comporte un champ de texte que j'essaie de mettre à jour via le contrôleur Showcase. Le résultat obtenu est une entrée supplémentaire de la Galerie, le long de l'original, au lieu d'une mise à jour de l'entrée d'origine.Mise à jour hasone relation se comporte étrangement (cakephp)

Qu'est-ce que je fais mal?

Ma vitrine vue se présente comme suit:

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();

Ma fonction Vitrine-contrôleur:

$uses = array('Showcase','Gallery')

function update(){

if(!empty($this->data)){

$this->Showcase->saveAll($this->data, array('validate'=>'first'));

}

}

Le modèle de démonstration $hasOne = 'Gallery' et le modèle de la galerie $belongsTo = 'Showcase'.

$this->Showcase->saveAll() est la fonction appropriée à utiliser ici? Ou dois-je peut-être mettre à jour l'entrée de la galerie dans le contrôleur de la galerie? Cela fonctionnera probablement, mais semble si peu élégant.

Répondre

4

Je peux voir ce que vous voulez dire en étant non élégant, ce serait bien s'il réalisait que vous aviez une relation hasOne et donc mis à jour n'importe quel enregistrement existant.

Cependant actuellement dans le cadre je pense que votre meilleure option serait d'ajouter echo $form->input('Gallery.id', array('type'=>'hidden', 'value'=>$showcase['Gallery']['id'])); à votre vue.

En note. Dans l'action du contrôleur qui définit actuellement $showcase si vous l'attribuez plutôt à $this->data, vous n'aurez pas besoin de toujours spécifier 'value' => ... dans vos entrées de formulaire.

+0

excellent, cela fonctionne parfaitement. –

Questions connexes