Обновление имеет одно отношение ведет себя странно (cakephp) - PullRequest
2 голосов
/ 10 января 2010

У меня есть существующая витрина, которая hasOne Галерея. Галерея уже существует с соответствующим значением ForeignKey showcase_id. В галерее есть текстовое поле, которое я пытаюсь обновить через Showcase-контроллер. В результате я получаю дополнительную запись в галерее вместе с исходной вместо обновления исходной.

Что я делаю не так?

Мой Showcase-view выглядит следующим образом:

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

Функция My Showcase-контроллер:

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

function update(){

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

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

}

}

Модель Витрина $hasOne = 'Gallery' и модель Галерея $belongsTo = 'Showcase'.

Является ли $this->Showcase->saveAll() подходящей функцией для использования здесь? Или мне, возможно, нужно обновить запись галереи в контроллере галереи? Это, вероятно, сработает, но выглядит так не элегантно.

1 Ответ

4 голосов
/ 11 января 2010

Я понимаю, что вы подразумеваете под не элегантностью, было бы хорошо, если бы вы поняли, что у вас есть отношения hasOne, и поэтому обновили любую существующую запись.

Однако в настоящее время в рамках я думаю, что лучшим вариантом будет добавить echo $form->input('Gallery.id', array('type'=>'hidden', 'value'=>$showcase['Gallery']['id'])); к вашему мнению.

В качестве примечания. В действии контроллера, которое в настоящее время определяет $showcase, если вместо этого назначить его $this->data, вам не нужно будет всегда указывать 'value' => ... во входных данных формы.

...