Обновление отношения hasone ведет себя странно (cakephp)
-
19-09-2019 - |
Вопрос
У меня есть существующая витрина, которая hasOne
Галерея.Галерея уже существует с помощью ForeignKey. showcase_id
установите правильное значение.В Галерее есть текстовое поле, которое я пытаюсь обновить через контроллер Showcase.В результате я получаю дополнительную запись в Галерее наряду с исходной вместо обновления исходной записи.
Что я делаю не так?
Моя витрина выглядит следующим образом:
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()
какую функцию здесь использовать?Или мне, возможно, нужно обновить запись галереи в контроллере галереи?Это, вероятно, сработает, но это кажется таким неэлегантным.
Решение
Я понимаю, что вы подразумеваете под неэлегантностью: было бы неплохо, если бы он понял, что у вас есть отношение hasOne, и поэтому обновил любую существующую запись.
Однако в настоящее время я думаю, что лучшим вариантом будет добавить echo $form->input('Gallery.id', array('type'=>'hidden', 'value'=>$showcase['Gallery']['id']));
на ваш взгляд.
В качестве примечания.В действии контроллера, которое в данный момент определяет $showcase
если вместо этого вы назначите его $this->data
тогда вам не нужно будет всегда указывать 'value' => ...
во входных данных вашей формы.