День 3:)
Я не могу сделать так, чтобы мой массив (с несколькими записями) НЕ индексировался численно. Для сохранения правильности работы saveAll () в нескольких таблицах необходим массив с ключами.
У меня есть полный дамп данных ниже с числовым индексированным массивом, и каким-то образом он должен быть проиндексирован ключами (я могу заставить его работать правильно, но ТОЛЬКО при вставке одной записи) ..
Мой взгляд для bulk_add
<?php for ($i = 1; $i <= 2; $i++) { ?>
<table>
<tr>
<td><?php echo $this->Form->input("$i.plan_detail_id", array(
'options' => $plans_list,
'type' => 'select',
'empty' => '-- Select a the Plan Detail --',
'label' => 'Select a the Plan Detail'
));
?></td>
<td><?php echo $this->Form->input("$i.monthly_cost", array('label' => 'Monthly Cost')); ?></td>
<td><?php echo $this->Form->input("$i.dental_cost", array('label' => 'Vision Cost')); ?></td>
<td><?php echo $this->Form->input("$i.age_id", array('label' => 'Select an Age Range', 'empty' => '-- Select an Age Range --')); ?></td>
<td><?php echo $this->Form->input("$i.applicant_id", array('label' => 'Applicant Type', 'empty' => '-- Select an Applicant Type --')); ?></td>
<td><?php echo $this->Form->input("$i.state_id", array('label' => 'Select a State', 'empty' => '-- Select a State --')); ?></td>
<td>
<?php echo $this->Form->input("$i.Zip", array('multiple' => 'true')); ?>
</td>
</tr>
</table>
<?php } // end for() ?>
<?php
echo $this->Form->end(__('Submit', true));
?>
Код моего контроллера:
function bulk_add() {
if (!empty($this->data)) {
$this->Plan->create();
if ($this->Plan->saveAll($this->data, array('atomic' => 'false'))) {
// Debug
debug($this->data);
$this->Session->setFlash(__('The plan has been saved', true));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The plan could not be saved. Please, try again.', true));
}
}
$ages = $this->Plan->Age->find('list', array('order' => array('Age.name ASC')));
$applicants = $this->Plan->Applicant->find('list', array('order' => array('Applicant.name ASC')));
$states = $this->Plan->State->find('list', array('order' => array('State.name ASC')));
$zips = $this->Plan->Zip->find('list', array('order' => array('Zip.title ASC')));
$this->set(compact('planDetails', 'ages', 'applicants', 'states', 'zips'));
$plans_list = array();
$plans = $this->Plan->PlanDetail->find('all', array('order' => array('PlanDetail.name ASC')));
foreach ($plans as $row) {
$plans_list["{$row['PlanDetail']['id']}"] = "{$row['PlanDetail']['name']} - {$row['PlanDetailNote']['name']}";
}
$this->set('plans_list', $plans_list);
}
Вот дамп отладки:
Array
(
[Plan] => Array
(
[1] => Array
(
[plan_detail_id] => 36
[monthly_cost] => 0
[dental_cost] => 0
[age_id] => 14
[applicant_id] => 1
[state_id] => 1
)
[2] => Array
(
[plan_detail_id] => 36
[monthly_cost] => 0
[dental_cost] => 0
[age_id] => 2
[applicant_id] => 4
[state_id] => 1
)
)
[1] => Array
(
[1] => Array
(
[Zip] => Array
(
[0] => 487
[1] => 486
[2] => 485
[3] => 484
[4] => 483
)
)
)
[2] => Array
(
[2] => Array
(
[Zip] => Array
(
[0] => 485
[1] => 484
[2] => 483
)
)
)
* * Тысяча двадцать-одина)