Проблема с сохранением значения в базе данных (cakePHP)

0

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

Я повторил требуемое значение в модели, чтобы проверить, получено ли значение. Значение отражается как 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); 

}

ИЗМЕНИТЬ

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

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

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

ИЗМЕНИТЬ

Если я сохраняю целое значение напрямую, например

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

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

  • 0
    Сохранены ли какие-либо другие значения? Или это просто "обязательно"?
  • 0
    Все остальные значения сохраняются правильно, как имя, размер и все обновляются правильно. Только обязательное значение не сохраняется. Недавно я добавил это обязательное свойство. Ранее у меня было только имя, тип размера, инструкции и последовательность.
Показать ещё 4 комментария
Теги:
database
cakephp

1 ответ

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 перед сохранением.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню