CakePHP: связанная таблица hasOne, сохраняющая несколько записей при обновлениях - PullRequest
0 голосов
/ 18 ноября 2010

Абсолютно новый для Cake.

У меня есть эта таблица с именем Content и еще одна с именем ContentMeta (связанная с помощью content_id).Каждой записи в Content соответствует соответствующая ContentMeta.

Когда я добавляю новое содержимое, я использую этот код для добавления новой записи в ContentMeta:

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

 // Save Content
 $this->Content->create();
 $content = $this->Content->save( $this->data );
 // Save Meta
 if( !empty( $content ) ) {
  $this->data['ContentMeta']['content_id'] = $this->Content->id;
  $this->Content->ContentMeta->save( $this->data );
  $this->Session->setFlash( 'Content has been saved.' );
  $this->redirect( array( 'action' => 'edit', $this->Content->id ) );
 }
}

.добавьте одну новую запись в Content и одну в ContentMeta.

Когда дело доходит до обновления данных (режим редактирования), у меня небольшая проблема.Запись для контента обновляется без помех, но в таблице ContentMeta новая запись создается при каждом обновлении.

Вот код для обновления:

$this->Content->id = $id;
// Update Content
$content = $this->Content->save( $this->data );
// Update Meta
if( !empty( $content ) ) {
    //Debugger::dump(print_r($this->data,true));
    $this->data['ContentMeta']['content_id'] = $this->Content->id;
    $this->Content->ContentMeta->save( $this->data );
    $this->Session->setFlash( 'Content has been updated.' );
    $this->redirect( array( 'action' => 'edit', $this->Content->id ) );
}

Я уверен, что это логическая ошибка в этом блоке, которая вызывает это.Кто-нибудь может дать мне представление, где я иду не так?

Спасибо, м ^ е

1 Ответ

2 голосов
/ 18 ноября 2010

Для меня в вашем массиве данных отсутствует $ this-> data ['ContentMeta'] ['id'].И поскольку это поле пустое, попытка создать новую строку.

Итак, в вашей форме добавьте скрытое поле id для ContentMeta.

Еще одна вещь, которая, я думаю, улучшит ваш код:чтобы использовать

$this->Content->saveAll($this->data);

, вы сохраните свои данные сразу вместо двух вызовов save () для каждой модели.Проверьте руководство в cookboook (и найдите saveAll в тексте).

...