CakePHP保存每个单独模型的选中项目

时间:2011-03-09 20:15:03

标签: cakephp save cakephp-1.3

我在CakePHP中保存多个条目时遇到了一些麻烦。我不确定saveAll()是否会执行这个技巧,因为我正在尝试为从连接表中检查的每个项目保存一个条目,该连接表将两个单独的表连接到保存到的表。

<小时/> 我有以下表:SamplesResults和一个名为SampleTypeTests的连接表(连接两个单独的表 - SampleTypes&amp; Tests)。

每个样本都有一个FK sample_type_id
每个结果都有FK sample_idsample_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'])

关于如何改进表格以输出所需数组的任何提示?

1 个答案:

答案 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);