Этот код обновляет только одну строку (ту, которая соответствует первой в массиве):
Редактировать: показать больше кода!
Вот мой взгляд. Он захватывает записи в БД на основе ассоциации (есть одна модель "клиенты", которая имеет отношение один ко многим с двумя другими моделями, программами и пользователями).
<div class="view">
<h2><?php echo h($program['Program']['title'])?></h1>
<?php echo $this->Form->create('User', array('action' => 'pushing')); ?>
<table id="pushTable">
<tr><th colspan="5">Select the athletes you would like to push this program to:</th></tr>
<tr>
<?php $i=0; ?>
<?php foreach ($clients['Players'] as $player) {?>
<?php if ($i == 0) {?><tr><?php } ?>
<td><?php echo $this->Form->checkbox($player['id']) . ' ' . $player['username'];?></td>
<?php if ($i == 4) {?></tr><?php $i = 0; } else { $i++; } ?>
<?php } ?>
</tr>
</table>
<?php echo $this->Form->end(__('Push')); ?>
</div>
В моем контроллере Users:
public function pushing() {
if ($this->request->is('post') || $this->request->is('put')) {
$athletes = $this->request->data['User'];
foreach ( $athletes as $player => $flag){
if ($flag == 0){
unset($athletes[$player]);
}
}
$this->User->updateAll(
array('User.data' => "'foo'"),
array('User.id' => $athletes)
);
$this->Session->setFlash(__('Programs were pushed!'));
}
}
}
$ athtes - это массив, собранный из флажков, и мне кажется, с этим проблем нет ... поэтому я не уверен, почему updateAll не выполняет итерацию для каждого идентификатора в массиве ...
Может быть, это не работает по причинам, связанным с БД? Я занимаюсь разработкой MAMP ... возможно, БД не настроен на "атомарные" вещи (об этом слышали только сегодня!).
Ранее я пытался использовать foreach для циклического перебора идентификаторов, затем в foreach просто делал это (edit: больше кода!)
public function pushing() {
if ($this->request->is('post') || $this->request->is('put')) {
foreach ($this->request->data['User'] as $player => $flag) {
if ($flag) {
$this->User->id = $player; // set ID to player we want to save ($player is id that was suplpied in view to checkbox
$this->User->saveField('data', 'foo'); // then, push the data!
}
}
$this->Session->setFlash(__('Programs were pushed!'));
}
$this->autoRender = false;
$this->redirect(array('action' => 'index'));
}
Но это привело к странным результатам с перенаправлением. Независимо от того, куда я поместил перенаправление в этом действии, сохранение просто хотело делать свое дело. Этот $ this-> autoRender ничего не сделал. Контроллер все еще пытался разрешить / pushing / route