У меня проблемы с сохранением нескольких записей в CakePHP.Я не уверен, что saveAll()
справится с задачей, поскольку я пытаюсь сохранить запись для каждого элемента, проверенного из объединяемой таблицы, которая соединяет две отдельные таблицы с той, в которую сохраняется.У меня есть следующие таблицы: Samples
, Results
и таблица соединений с именем SampleTypeTests
(объединяет две отдельные таблицы - SampleTypes & Tests).
Каждый образец имеет FK sample_type_id
Каждый результат имеет FK sample_id
, sample_type_test_id
У меня есть представление Добавить для результатов, в котором перечислены все SampleTypeTests
дляSamples.sample_type_id
Моя форма просмотра Add в данный момент выглядит следующим образом:
<?php
echo $this->Form->create('Result');
echo '<fieldset>';
echo '<legend>Choose Analysis</legend>';
echo $this->Form->input('sample_id', array('type'=>'hidden', 'value' => $this->passedArgs['0']));
echo $this->Form->input('sample_type_test_id',array(
'label' => __('Tests',true),
'type' => 'select',
'multiple' => 'checkbox',
'options' => $sampleTypeTests,
'selected' => $html->value('Result.sample_type_test_id'),
'hiddenField' => false
));
echo '</fieldset>';
echo $this->Form->end(__('Submit', true)); ?>
Спасительная часть - это то, где у меня самая большая головная боль.Мне нужна запись Results
, созданная для каждой проверенной SampleTypeTests
, и добавление SampleTypeTest.id
в FK Results.sample_type_tests_id
.
Я пытался адаптировать следующее для своих нужд http://mrphp.com.au/code/working-habtm-form-data-cakephp#habtm_checkbox
Вот что я получил:
function add() {
if ($this->Result->saveAll($this->data['Result'])) {
$this->Session->setFlash(__('All required tests have been saved', true));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('Could not be saved. Please, try again.', true));
}
// Everything else
}
Это не сработало.Выше может быть неправильно.Это больше для демонстрации того, что я пытался.Я очень теряюсь во всем этом, и мне нужна помощь.Нужно ли использовать saveAll
?Нужно ли вкладывать save
?Разве я сделал это намного сложнее, чем нужно?
ОБНОВЛЕНИЕ:
Я заметил, что вышеприведенная форма выводит массив как
Array (
[Result] => Array
(
[sample_id] => 21
[sample_type_test_id] => Array
(
[0] => 1
[1] => 24
[2] => 16
[3] => 71
)
)
)
Когда то, что он должен произвести, будет:
Array
(
[Result] => Array(
[0] => Array
(
[sample_id] => 21
[sample_type_test_id] => 1
)
[1] => Array
(
[sample_id] => 21
[sample_type_test_id] => 24
)
)
)
ТогдаЯ могу просто использовать saveAll($this->data['Result'])
Любые советы о том, как улучшить форму для вывода нужного массива?