2012-03-10 6 views
0

Я работал с cakephp и смог создать несколько простых моделей и отношений. Я специально пытался внедрить ассоциацию hasMany. Моя проблема связана с попыткой обновления дочерних элементов.CakePHP Поля, не обновляемые на странице редактирования

Для целей моего примера я предполагаю, что у меня есть класс родительского класса и ребенка. Я могу создать представление и добавить страницы без каких-либо проблем. Тем не менее, у меня нет такого же успеха на странице редактирования. На странице редактирования я могу отображать как поля родителя, так и поля «Дети». Однако, когда я иду, чтобы сохранить форму, вместо обновления дочерних элементов она просто добавляет эти строки в дополнение к уже существующим. Я не знаю, почему это происходит. Я где-то пропускаю параметр?

Это мой код для редактирования страницы

echo $this->Form->create('Parent', array('action' => 'edit')); 
echo $this->Form->input('title'); 
echo $this->Form->input('body', array('rows' => '3')); 
echo $this->Form->input('id', array('type' => 'hidden')); 

$x = 0; 
foreach($this->request->data['Child'] as $child){ 
    print $this->Form->input("Child.$x.name"); 
    $x++; 
} 

И это функция редактирования в моем ParentController

public function edit($id = null) { 
    $this->Parent->id = $id; 
    if ($this->request->is('get')) { 
     $this->request->data = $this->Parent->read(); 
     } else { 
      if ($this->Parent->saveAll($this->request->data)) { 
       $this->Session->setFlash('Your post has been updated.'); 
       $this->redirect(array('action' => 'index')); 
      } else { 
       $this->Session->setFlash('Unable to update'); 
      } 
     } 
} 
+0

А вы посмотрите на исходный код, чтобы убедиться, что форма действия/контроллер/редактировать/идентификатор, а не только/контроллер/редактировать? Поскольку вы принимаете значение id по умолчанию равным нулю, это может случиться. –

+0

Прежде чем кто-нибудь скачет мне горло, указывая, что у него есть $ this-> data ['Parent'] ['id'] как скрытое поле, это БУДЕТ ПЕРЕЗАПИСИ, установив $ this-> Parent-> id в $ id. Если $ id равно null, он будет вставлять новые строки. –

ответ

0

Попробуйте вставить это перед saveAll:

Я знаю, что когда сохраняя несколько связанных данных, вам необходимо проверить, какой идентификатор будет использоваться.

unset($this->Parent->Child->validate['parent_id']);

Ресурсы: http://book.cakephp.org/1.3/view/1031/Saving-Your-Data