Проблема с сохранением значения в базе данных (cakePHP) - PullRequest
0 голосов
/ 23 июня 2009

У меня есть флажок с именем обязательно, где, если флажок установлен, его значение равно 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); 

}

EDIT

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

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

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

EDIT

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

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

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

1 Ответ

1 голос
/ 24 июня 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...