CakePHP: как обновлять несколько записей одновременно с помощью помощника формы

На странице редактирования для тестового теста модели я хочу обновить поле «Вопросы.Размер» на всех связанных с ним (по hasMany) вопросах из той же формы.

Я подготовил главу книги Cake о файле saveMany () / saveAll () в книге, и я использую Model.0.field syntax но я не могу понять, как сообщить CakePHP, какая запись соответствует тому, какой вход , Если поле # в Model.#.field Соответствует полю id вопроса? Вот что я сейчас делаю:

  echo $this->Form->create( 'Question', array('action'=>'order')); $n = 0; foreach ($questions_array as $question) : ?> <?php echo $this->Form->input('Question.'.$n.'.order' ); ?> <?php echo $this->Form->input('Question.'.$n.'.id', array('type'=>'hidden', 'value'=>$question['Question']['id']) ); ?> <input type="submit" value="Save" /> ... $n++; endforeach; $this->Question->Form->end(); 

Форма отправляется и появляется для сохранения, но обновленные значения order не соответствуют правильным записям вопроса. Что я делаю не так?

Обновление :

Вот order действий в моем контроллере:

 public function admin_order() { $data = $this->request->data; $this->Question->saveAll($data['Question']); $this->Session->setFlash( "Order saved."); $this->redirect( $this->referer() ); } 

Solutions Collecting From Web of "CakePHP: как обновлять несколько записей одновременно с помощью помощника формы"

CakePHP связывает все поля с одним и тем же «индексом» как единую «запись» в вашей базе данных. «Индекс» (т. Foo.0.id 0 в Foo.0.id ) не имеет никакого отношения к «id» записи, это просто число.

Например;

 Foo.0.id = 123 Foo.0.name = 'hello'; Foo.1.id = 124 Foo.1.name = 'world'; 

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

 Foo.12345.id = 123 Foo.12345.name = 'hello'; Foo.54321.id = 124 Foo.54321.name = 'world'; 

Пока поля одной и той же записи имеют одинаковый «индекс», CakePHP поймет, что они принадлежат «вместе».

При отправке этих данных и их сохранении;

 $this->Foo->saveMany($this->data['Foo']); // Just $this->data will probably work as well 

CakePHP обновляет две строки с помощью модели Foo ;

таблица 'foos';

 id name ------------------------ 123 hello 124 world 

Кажется, что ваш код использует один и тот же идентификатор ( $qset['Qset']['id'] ) для каждой строки, что, вероятно, не является правильным ID для обновления этих записей

 As we can see at CakePHP Book, the instruction is: // Create: id isn't set or is null $this->Recipe->create(); $this->Recipe->save($this->request->data); // **Update**: id is set to a numerical value $this->Recipe->id = 2; $this->Recipe->save($this->request->data); 

Учитывая, что есть еще люди, которые ищут этот ответ в 2014 году, вы должны использовать в
Вид : / * (с учетом счетчика $ n) * /
$ This-> вход ( 'Вопрос.' $ П.. 'Порядок.');
$ This-> вход (… 'Вопрос' $ п. ID ');
Контроллер : $ this-> Question-> updateAll -> ($ this-> request-> data ['Question']);