CakePHP为单独模型的每个选中项保存
在CakePHP中保存多个条目时遇到一些问题。我不确定CakePHP为单独模型的每个选中项保存,cakephp,save,cakephp-1.3,Cakephp,Save,Cakephp 1.3,在CakePHP中保存多个条目时遇到一些问题。我不确定saveAll()是否会起作用,因为我正试图为连接表中检查的每个项目保存一个条目,该连接表将两个单独的表连接到要保存的表中。 我有以下表格:Samples,Results和一个名为SampleTypeTests的联接表格(联接两个单独的表格-SampleTypes&Tests) 每个样本都有一个FKSample\u type\u id 每个结果都有FKsample\u id,sample\u type\u test\u id 我有一个结果添
saveAll()
是否会起作用,因为我正试图为连接表中检查的每个项目保存一个条目,该连接表将两个单独的表连接到要保存的表中。
我有以下表格:
Samples
,Results
和一个名为SampleTypeTests
的联接表格(联接两个单独的表格-SampleTypes&Tests)
每个样本都有一个FKSample\u type\u id
每个结果都有FK
sample\u id
,sample\u type\u test\u id
我有一个结果添加视图,其中列出了样本的所有SampleTypeTests
。样本类型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)); ?>
这没用。上述观点可能是错误的。这更多的是为了证明我的尝试。我在这一切中迷失了方向,我需要一些帮助。我是否需要使用saveAll
?是否需要嵌套保存
?我把事情弄得比需要的复杂得多了吗
更新: 我注意到上面的表单将数组输出为
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'])
有没有关于如何改进表单以输出所需数组的提示?我刚刚在另一篇文章中给出了一个类似的答案,可能对您有用,我现在没有时间修改它,但请告诉我,如果这不能回答您的问题,那么我将详细说明 好的。。。在进一步阅读你的问题之后,我认为这应该可以解决问题
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);
}
这应保存到数据库中,作为:
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);
谢谢你,蒂姆。看看另一个答案,我不太明白如何使它适应这个问题。我基本上已经解决了这个问题,我需要“重新调整”发布的数组。这样它就可以用saveAll()的方式将其发送到add操作。我们如何调整表单,或者在动作中加入某种foreach循环,将数组处理成所需的数组。这是蛋糕道吗?还是我遗漏了什么?我觉得我确实需要使用saveAll。我可能需要更新我的问题。我想我只需要给它提供正确的数组结构。我还注意到,您正在将saveAll函数包装到foreach循环中,我没有测试过这一点,但是foreach是否真的将其添加到数组的第二个索引中?如果您的积极保存操作之一是重定向。。。这不会杀死foreach循环吗?是的,我在行动中抛弃了foreach。。。问题已更新。希望没问题。可以删除$this->SampleTypeTest->save($data);并将其替换为pr($数据);然后将输出粘贴到这里?
$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);