我在CakePHP中保存多个条目时遇到了一些麻烦。我不确定saveAll()
是否会执行这个技巧,因为我正在尝试为从连接表中检查的每个项目保存一个条目,该连接表将两个单独的表连接到保存到的表。
Samples
,Results
和一个名为SampleTypeTests
的连接表(连接两个单独的表 - SampleTypes& Tests)。
每个样本都有一个FK sample_type_id
每个结果都有FK sample_id
,sample_type_test_id
我有一个结果的添加视图,其中列出了SampleTypeTests
Samples.sample_type_id
我的添加视图表单目前看起来像这样:
<?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'])
关于如何改进表格以输出所需数组的任何提示?
答案 0 :(得分:1)
我刚刚对另一篇可能对你有用的帖子给出了类似的答案,我现在没有时间对其进行修改,但请告诉我,如果这不能解答你的问题,我会详细说明。
How to create a view page to save two objects in cakePHP
好的......在进一步阅读你的问题后,我认为这应该可以解决问题......
foreach ($this->data['Result']['sample_type_test_id'] as $v) {
$data = array(
'id'=>'',
'sample_id' => $this->data['Result']['sample_id'],
'sample_type_test_id' => $v
);
$this->SampleTypeTest->save($data);
}
这应该保存为db:
id | sample_id | sample_type_test_id
1 21 1
2 21 24
3 21 16
4 21 71
好的,试试这个......
$data;
$i=0;
foreach ($this->data['Result']['sample_type_test_id'] as $v) {
$data[$i] = array(
'id'=>'',
'sample_id' => $this->data['Result']['sample_id'],
'sample_type_test_id' => $v
);
$i++;
}
$this->Result->save($data);