3

I had a problem with saving my data "my form does not passed a correct array", I want to know what is the error in my code (After reading the cookbook)I understand the array that passed to saving method should be like this

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' => ''))

but when I debug my code I found that the data passed to saving method :

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' => ''
        ),

My form :

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'));

    ?>  

My 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');
            }
        }

The Error 'UPDATE'

I go DATABASE ERROR Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') GROUP BY s.state, s.indicator_datum_id) AS LatestStateUpdate ON' at line 4

SQL Query: SELECT IndicatorDatum.id, IndicatorDatumUpdate.*, (CONCAT(IndicatorDatum.indicator_id,'_',IndicatorDatum.report_year_id)) AS IndicatorDatum__indexKey FROM astest.indicator_data AS IndicatorDatum INNER JOIN (SELECT u.indicator_datum_id, MAX(u.created) as update_date, s.state FROM indicator_datum_states s INNER JOIN indicator_datum_updates u on u.id = s.indicator_datum_update_id WHERE s.indicator_datum_id IN () GROUP BY s.state, s.indicator_datum_id) AS LatestStateUpdate ON (IndicatorDatum.id = LatestStateUpdate.indicator_datum_id AND IndicatorDatum.state = LatestStateUpdate.state) INNER JOIN astest.indicator_datum_updates AS IndicatorDatumUpdate ON (IndicatorDatumUpdate.indicator_datum_id = LatestStateUpdate.indicator_datum_id AND IndicatorDatumUpdate.created = LatestStateUpdate.update_date) WHERE IndicatorDatum.id = (NULL)

6
  • Hi, data is not save in data base right ? Check the input field name and table field are same ? Commented Jun 10, 2015 at 10:15
  • yes, It is the same , I am wondering why I have a wrong passed array ? Commented Jun 10, 2015 at 10:23
  • let me know ? what error do u got ? Commented Jun 10, 2015 at 10:26
  • This is what i got when trying to save the data (The indicator data could not be saved. Please verify the fields highlighted in red and try again.) Commented Jun 10, 2015 at 10:27
  • What you updated in question ? Commented Jun 10, 2015 at 10:52

1 Answer 1

1

It's throwing the error because of your empty IN() and doesn't appear to be related to the saveAll():

WHERE s.indicator_datum_id IN ()

Where is this SELECT being built? I suggest checking if it's empty first before building that condition.

(It's hard to say where that is coming from - it doesn't look like it's coming from any of the provided code.)

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.