2012-04-11 8 views
1

MycakePhp Version ist 2.1.1.CakePHP 2.1 Verwandte Objekte manuell speichern

Ich versuche, das dazugehörige Modell manuell mit SaveAll() Funktion

Modell

  • Mitarbeiter hasOne Adresse
  • Mitarbeiter in der Abteilung

Gehört zu speichern, damit Tisch

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

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

jetzt Mitarbeiter Schaffung add.ctp hat, die eine Form Eingang für Mitarbeiter und Anschrift

ich weiß

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

dies die Modelle speichern aber
Ich möchte speichern die Zuordnung manuell

erhält

Ich ging durch das offizielle CakePhp Dokument here und ich habe so etwas wie

versucht
 $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') 
      ) 
     )); 

es nicht funktioniert, und wirft folgende Fehler

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]

ich bin cakephp Anfänger. Bitte hilf mir.

$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

Können Sie mehr von 'add()' Methode zeigen? Wo definierst du '$ data'? –

+0

können Sie mir sagen, wie man $ data definiert habe ich habe keine Ahnung – maaz

+0

Wenn Sie '$ data' nicht definieren, sollten Sie' $ this-> request-> data' verwenden, damit Sie die Daten Ihres Formulars erhalten . –

Antwort

0

Nach einigen Recherchen habe ich es gefunden.

 $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)) 

das wird es tun.

0

Versuchen nur ein Array in fieldList Parameter verwendet:

$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'))); 

Laut Handbuch erwartet fieldList „eine Reihe von Feldern, die Sie möchten, Speichern zulassen ". Ich denke nicht akzeptiert eine multidimensionale Anordnung.

$this->request->data sind alle Felder Ihres Formulars, können Sie mit debug($this->request->data) überprüfen.

+0

speichert Mitarbeiter und Depot nicht – maaz

+0

Haben Sie es ohne zweiten Parameter versucht? Nur '$ this-> Employee-> saveAll ($ this-> request-> data)'? Und checkte '$ this-> request-> data mit' debug() '? –

+0

funktioniert gut mit $ this-> Employee-> saveAll ($ this-> request-> data) – maaz

Verwandte Themen