2009-06-23 2 views
0

У меня есть флажок с именем required, где при щелчке по галочке его значение равно 1, в противном случае его значение равно 0. Значение передается из файла представления в контроллер. Файл модели получает значение от контроллера, но значение не сохраняется.Проблема при сохранении значения в базе данных (cakePHP)

Я повторил требуемое значение в модели, чтобы проверить, получено ли это значение. Значение отражается как 1. Но в базе данных он не обновляется.

Это мой код:

function updateFieldEntries($data) 
{ 
    $this->data['Attribute']['id']=$this->Attribute->find('all', array(
            'fields' => array('Attribute.id'), 
            'order' => 'Attribute.id DESC')); 

    $this->data['Attribute']['id']=$this->data['Attribute']['id'][0]['Attribute']['id']; 

    $this->data['Attribute']['form_id'] = $this->find('all', array(
            'fields' => array('Form.id'), 
            'order' => 'Form.id DESC')); 
    $this->data['Attribute']['form_id']=$this->data['Attribute']['form_id'][0]['Form']['id']; 

    $this->data['Attribute']['instructions']=$data['Attribute']['instructions']; 

    $this->data['Attribute']['required']=$data['Attribute']['required']; 
    echo " required model ".$this->data['Attribute']['required']; 


    $this->data['Attribute']['sequence_no'] =$this->Attribute->find('all', array(
           'conditions' => array('Attribute.form_id' =>$this->data['Attribute']['form_id']), 
            'fields' => array('Attribute.sequence_no'), 
            'order' => 'Attribute.sequence_no DESC')); 
    $this->data['Attribute']['sequence_no']=$this->data['Attribute']['sequence_no'][0]['Attribute']['sequence_no']; 

    if($data['Attribute']['name']== ''){ 
     $this->data['Attribute']['label']=$this->Attribute->find('all', array(
           'conditions' => array('Attribute.id' =>$this->data['Attribute']['id']), 
            'fields' => array('Attribute.label')                   )); 
     $this->data['Attribute']['label']=$this->data['Attribute']['label'][0]['Attribute']['label']; 
    } 
    else{ 
     $this->data['Attribute']['label']= $data['Attribute']['name']; 
    } 

    if($data['Attribute']['size']== ''){ 
     $this->data['Attribute']['size']=$this->Attribute->find('all', array(
           'conditions' => array('Attribute.id' =>$this->data['Attribute']['id']), 
            'fields' => array('Attribute.size')                  )); 
     $this->data['Attribute']['size']=$this->data['Attribute']['size'][0]['Attribute']['size']; 
    } 
    else{ 
     $this->data['Attribute']['size']= $data['Attribute']['size']; 
    } 


    if($data['Attribute']['instructions']== ''){ 
      $this->data['Attribute']['instructions']=$this->Attribute->find('all', array(
           'conditions' => array('Attribute.id' =>$this->data['Attribute']['id']), 
            'fields' => array('Attribute.instructions')                  )); 
    $this->data['Attribute']['instructions']=$this->data['Attribute']['instructions'][0]['Attribute']['instructions']; 

      } 

    $this->Attribute->save($this->data); 

} 

EDIT

Я также проверил, если только и требуемое значение сохраняются при помощи параметра saveField.

$this->Attribute->saveField('required',$this->data['Attribute']['required']); 

Значение 1 хранится в отдельной строке таблицы для этого конкретного атрибута. Так в чем проблема, почему она не сохраняется вместе с другими значениями.

EDIT

Если я сохранить целое значение непосредственно, как

 $this->data['Attribute']['required']='7'; 

она сохраняется в базе данных. Как?? В чем проблема тогда?

+0

Сохранены ли какие-либо другие значения? Или это просто «требуется»? –

+0

Все остальные значения сохранены правильно, так как имя, размер обновлены правильно. Только требуемое значение не сохраняется. Я добавил это свойство в последнее время. Раньше у меня было только имя, размер, инструкции и последовательность нет – Angeline

+0

Не было ли это разрешено с вашим предыдущим вопросом? http://stackoverflow.com/questions/1030639/problem-in-storing-value-in-database –

ответ

1

Я хотел бы начать с некоторым рефакторинга:

function updateFieldEntries($data) 
{ 
    $tempAttr = $this->Attribute->find 
     (
      'first', 
      array 
      (
       'order' => 'Attribute.id DESC', 
       'fields' => array('Attribute.id') 
      ) 
     ); 

    $this->data['Attribute']['id'] = $tempAttr['Attribute']['id']; 

    $tempAttr = $this->find 
     (
      'first', 
      array 
      (
       'order' => 'Form.id DESC', 
       'fields' => array('Form.id') 
      ) 
     ); 

    $this->data['Attribute']['form_id'] = $tempAttr['Form']['id']; 

    $this->data['Attribute']['instructions'] = $data['Attribute']['instructions']; 
    $this->data['Attribute']['required'] = $data['Attribute']['required']; 

    $tempAttr = $this->Attribute->find 
     (
      'first', 
      array 
      (
       'order' => 'Attribute.sequence_no DESC', 
       'fields' => array('Attribute.sequence_no'), 
       'conditions' => array('Attribute.form_id' => $this->data['Attribute']['form_id']) 
      ) 
     ); 

    $this->data['Attribute']['sequence_no'] = $tempAttr['Attribute']['sequence_no']; 

    $tempAttr = $this->Attribute->find 
     (
      'first', 
      array 
      (
       'conditions' => array('Attribute.id' => $this->data['Attribute']['id']), 
       'fields' => array('Attribute.label', 'Attribute.size', 'Attribute.instructions') 
      ) 
     ); 

    if (empty($data['Attribute']['name'])) 
    { 
     $this->data['Attribute']['label'] = $tempAttr['Attribute']['label']; 
    } 
    else 
    { 
     $this->data['Attribute']['label'] = $data['Attribute']['name']; 
    } 

    if (empty($data['Attribute']['size'])) 
    { 
     $this->data['Attribute']['size'] = $tempAttr['Attribute']['size']; 
    } 
    else 
    { 
     $this->data['Attribute']['size'] = $data['Attribute']['size']; 
    } 

    if (empty($data['Attribute']['instructions'])) 
    { 
     $this->data['Attribute']['instructions'] = $tempAttr['Attribute']['instructions']; 
    } 
    else 
    { 
     $this->data['Attribute']['instructions'] = $data['Attribute']['instructions']; 
    } 

    $this->Attribute->save($this->data); 
} 

Тогда я хотел бы попробовать рекомендацию Travis Leleu по фактически отладки кода. Я бы начал с проверки значения $this->Attribute->id перед сохранением.

Смежные вопросы