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 我有一个结果添

在CakePHP中保存多个条目时遇到一些问题。我不确定
saveAll()
是否会起作用,因为我正试图为连接表中检查的每个项目保存一个条目,该连接表将两个单独的表连接到要保存的表中。
我有以下表格:
Samples
Results
和一个名为
SampleTypeTests
的联接表格(联接两个单独的表格-SampleTypes&Tests)

每个样本都有一个FK
Sample\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);