2010-01-10 5 views
2

У меня есть существующая Витрина, которая hasOne Галерея. Галерея уже существует с иностраннымKey showcase_id, установленным в соответствующее значение. В галерее есть текстовое поле, которое я пытаюсь обновить с помощью Showcase-контроллера. Результатом, который я получаю, является дополнительная запись в Галерее, по сравнению с оригинальной, вместо обновления оригинальной записи.Обновление hasone отношение ведет себя странно (cakephp)

Что я делаю неправильно?

Моя Витрина ракурса выглядит следующим образом:

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

Моя функция Витрина-контроллер:

$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() Правильная функция для использования здесь? Или мне, возможно, нужно обновить запись галереи в контроллере Gallery? Это, вероятно, будет работать, но кажется настолько не изящным.

ответ

4

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

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

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

+0

хороший, это хорошо работает. –

Смежные вопросы