2012-04-11 5 views
1

Версия Mycakephp - 2.1.1.Cakephp 2.1 Сохранение связанных объектов вручную

я пытаюсь сохранить соответствующую модель вручную с помощью SaveAll функции()

Модель

  • Сотрудник HasOne Адрес
  • Сотрудник Принадлежит отдела

так таблица

employees(first_name,last_name,age,sex,department_id)

addresses(first_line,second_line,city,state,employee_id)

в настоящее время создания сотрудника add.ctp имеет форму, которая получает входные данные для сотрудника и адреса

я знаю

$this->Employee->saveAll($this->request->data);

это сохранит модель, но
я хочу, чтобы сохранить ассоциацию вручную

Я проходил через официальный документ cakephp here, и я пробовал что-то вроде этого

 $this->Employee->saveAll($data, array(
      'fieldList' => array(
      'Employee' => array('first_name','last_name','age','sex','department_id'), 
      'Department' => array('first_line', 'second_line','city','state','employee_id') 
      ) 
     )); 

он не работает, и бросает следующие ошибки

Notice (8): Undefined variable: data [APP\Controller\EmployeesController.php, line 118]

Warning (2): array_keys() expects parameter 1 to be array, null given [CORE\Cake\Model\Model.php, line 1996]

я новичок CakePHP. пожалуйста помогите.

$this->request->data: Array

(

[Employee] => Array 
    (
     [first_name] => Jack 
     [last_name] => Robert 
     [age] => 32 
     [sex] => 0 
     [Department] => Development 
    ) 

[Address] => Array 
    (
     [first_line] => HSR Layout 
     [second_line] => 1st Cross 
     [city] => Najem 
     [state] => Barel 
    ) 

[Department] => Array 
    (
     [id] => 3 
    ) 

)

+0

Можете ли вы показать больше из метода 'add()'? Где вы определяете '$ data'? –

+0

Можете ли вы рассказать мне, как определить $ data, я понятия не имею об этом – maaz

+0

Если вы не определяете '$ data', вы должны использовать' $ this-> request-> data', поэтому вы получаете данные своей формы , –

ответ

0

После выполнения некоторых исследований я нашел его.

 $data = array(
     'Employee' => array(
     'first_name' => $this->request->data['Employee']['first_name'], 
     'last_name'=>$this->request->data['Employee']['last_name'], 
     'age'=>$this->request->data['Employee']['age'], 
     'sex'=>$this->request->data['Employee']['sex'], 
     'department_id'=>$this->request->data['Department']['id'] 
     ), 
     'Adress' => array(
     'first_line' => $this->request->data['Adress']['first_line'], 
     'second_line'=>$this->request->data['Adress']['second_line'], 
     'city'=>$this->request->data['Adress']['city'], 
     'state'=>$this->request->data['Adress']['state'] 
     ) 

    ); 


      $this->Employee->saveAll($data, array('deep' => true)) 

это сделаю.

0

Попробуйте использовать только массив в fieldList параметра:

$this->Employee->saveAll($this->request->data, array('fieldList' => array('Employee.first_name', 'Employee.last_name', 'Employee.age', 'Employee.sex', 'Department.first_line', 'Department.second_line', 'Department.city', 'Department.state', 'Department.employee_id'))); 

Согласно инструкции, fieldList ожидает «массив полей, которые вы хотите позволяют экономить ". Я думаю, что не принят многомерный массив.

$this->request->data все поля вашей формы, вы можете проверить с помощью debug($this->request->data).

+0

не сохраняет сотрудника и департамент – maaz

+0

Пробовал ли вы без второго параметра? Просто '$ this-> Employee-> saveAll ($ this-> request-> data)'? И проверили '$ this-> request-> data' с' debug() '? –

+0

он отлично работает с $ this-> Employee-> saveAll ($ this-> request-> data) – maaz

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