我在保存数据时遇到问题“我的表单未传递正确的数组”,我想知道代码中的错误是什么(阅读食谱之后)我了解传递给保存方法的数组应该是这样的

array(
    (int) 0 => array(
        'value' => '',
        'id' => '',
        'indicator_id' => '283',
        'report_year_id' => '7',
        'Assurance' => array(
            (int) 0 => '1',
            (int) 1 => '2',
            (int) 2 => '3',
            (int) 3 => '4',
            (int) 4 => '5'
        )
    ),
    (int) 1 => array(
        'value' => '',
        'id' => '',
        'indicator_id' => '283',
        'report_year_id' => '6',
        'Assurance' => ''))

但是当我调试代码时,我发现数据传递到保存方法:
array(
    'currentOrg' => array(
        'id' => '40'
    ),
    'IndicatorDatum' => array(
        '$cn' => array(
            'id' => '',
            'comment' => '',
            'reference' => ''
        ),
        (int) 0 => array(
            'value' => '',
            'Assurance' => ''
        ),
        (int) 1 => array(
            'value' => '',
            'Assurance' => ''
        ),
        (int) 2 => array(
            'value' => '',
            'Assurance' => ''
        ),
        (int) 3 => array(
            'value' => '',
            'Assurance' => ''
        ),

我的表格:
echo $this->DashboardForm->create('IndicatorDatum',array(
    'url' => array('controller'=>'indicator_data','action'=>'edit_group', 'dashboard'=>true, $thisGroup['IndicatorGroup']['id']),
    'novalidate'=>true
    ));
            <?  $cn = 0;
            foreach ($years as $year) :
            echo $this->Form->hidden("IndicatorDatum.$cn.id");
            echo $this->Form->hidden("IndicatorDatum.$cn.state");
            echo $this->Form->input("IndicatorDatum.$cn.indicator_id",array(
                                                'type'=>'hidden', 'default'=>$iid
                                            ));
        echo $this->Form->input("IndicatorDatum.$cnt.report_year_id",array(
                                            'type'=>'hidden', 'default'=>$yid
                                        ));
            echo $this->Form->input('IndicatorDatum.$cn.value');
            echo $this->Form->input("IndicatorDatum.$cn.Assurance", array('style'=>'width: 165px;',
                                                        'type'=>'select',
                                                        'multiple'=>true, 'options' => $assurances, 'selected' => $selected,'label' => false));
            $cn++;
            endforeach;

     echo $this->Form->submit(__('Save All'));

    ?>

我的 Controller :
if ($this->request->is('post')|| $this->request->is('put')) {
            $data = debug($this->request->data);
                        if ($this->IndicatorDatum->saveAll($this->request->data)) {
                $this->Session->setFlash(__('The indicator data has been saved'), 'flash/success');
                $this->redirect(array('action'=>'edit_group',$group_id));
            } else {
                $this->Session->setFlash(__('The indicator data could not be saved. Please verify the fields highlighted in red and try again.'), 'flash/error');
            }
        }

错误“UPDATE”

我去数据库错误
错误:SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法有错误。检查与您的MySQL服务器版本相对应的手册,以在第4行附近的')GROUP BY s.state,s.indicator_datum_id)AS LatestStateUpdate ON'附近使用正确的语法。

SQL查询:SELECT IndicatorDatumidIndicatorDatumUpdate。*,(CONCAT(IndicatorDatumindicator_id,'_',IndicatorDatumreport_year_id))AS IndicatorDatum__indexKey FROM astestindicator_data AS IndicatorDatum INNER JOIN(选择u.indicator_datum_id,MAX(u.created)作为update_date,s.state FROM indicator_datum_states s INNER JOIN indicator_datum_id在u.id = s.indicator_datum_update_id上​​更新u.s.indicator_datum() ,s.indicator_datum_id)LatestStateUpdate ON(IndicatorDatumid = LatestStateUpdateindicator_datum_id AND IndicatorDatumstate = LatestStateUpdatestate)INNER JOIN astestindicator_datum_updates AS IndicatorDatumUpdate ON(IndicatorDatumUpdateindicator_datum_id = LatestStateUpdateindicator_datum_id AND IndicatorDatumUpdatecreated = LatestStateUpdateupdate_date)在哪里IndicatorDatumid =(NULL)

最佳答案

由于您的IN()为空,因此引发了错误,并且似乎与saveAll()无关:

WHERE s.indicator_datum_id IN ()

这个SELECT在哪里构建?我建议在建立该条件之前先检查它是否为空。

(很难说它是从哪里来的-它看起来好像不是来自所提供的任何代码。)

10-08 08:06