У меня есть флажок с именем 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';
он сохраняется в базе данных. Как?? В чем проблема тогда?
Я бы начал с некоторого рефакторинга:
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
перед сохранением.