2015-06-27 16 views
6

Sto usando CakePHP 2.6.7.CakePHP 2.6.7 hasMany Data non è stato salvato

Un utente sarà in grado di aggiungere al suo profilo più auto e più indirizzi. Sarà inoltre in grado di collegare più indirizzi a un'auto e collegare un indirizzo a più auto.

Ho poi ho un modello User con:

class User extends AppModel { 
    public $hasMany = array(
     'Car', 
     'Address' 
    ); 
} 

un modello di vettura con:

class Car extends AppModel { 
    public $belongsTo = array(
     'User' 
    ); 

    public $hasAndBelongsToMany = array(
     'Address' => 
      array(
       'unique' => 'keepExisting' 
      ) 
    ); 
} 

Un un modello Indirizzo:

class Address extends AppModel { 
    public $hasAndBelongsToMany = array(
     'Car' => 
      array(
       'unique' => 'keepExisting', 
      ), 
    ); 

    public $belongsTo = array(
     'User' 
    ); 
} 

Ho una forma in modo che il l'utente può modificare le sue auto (solo una per il momento):

[...]

 <legend>Mes voitures</legend> 

     <?php 
      for($nbrvoiture = 0; $nbrvoiture <= 0; $nbrvoiture++) 
      { 
       ?><h3>Voiture <?php echo $nbrvoiture+1?></h3><?php 
       $myLabelOptions = array('text' => "Marque"); 
       echo $this->Form->input('Car.'.$nbrvoiture.'.CarMake', array('label' => array_merge($mainLabelOptions, $myLabelOptions))); 

       $myLabelOptions = array('text' => "Modèle"); 
       echo $this->Form->input('Car.'.$nbrvoiture.'.CarModel', array('label' => array_merge($mainLabelOptions, $myLabelOptions))); 

       $myLabelOptions = array('text' => "Plaque d'immatriculation"); 
       echo $this->Form->input('Car.'.$nbrvoiture.'.NumberPlate', array('label' => array_merge($mainLabelOptions, $myLabelOptions))); 


       echo $this->Form->submit("Valider", array(
        'class' => 'btn btn-default col-sm-offset-2' 
       )); 
      } 

Il fatto è che non riesco a salvare i dati al mio database. Ecco parte del codice del controller User:

function edit() { 
    // On récupère l'ID de l'utilisateur 
    $user_id = $this->Auth->user('id'); 

    // Si l'utilisateur n'a pas d'ID => il n'est pas connecté => il ne peut pas éditer son profil 
    if(!$user_id){ 
     $this->redirect('/'); 
     die(); 
    } 

    debug($this->User->find('all')); 

    $this->User->id = $user_id; 
    $passError = false; 

    if($this->request->is('put') || $this->request->is('post')){ 
     $d = $this->request->data; 

     $d['User']['id'] = $user_id; 
     debug($d); 


     if($this->request['pass'][0]=='cars') 
     { 

      if($this->User->saveAssociated($d, array('deep' => true))){ 
       $this->Session->setFlash(__("Les informations sur la voiture ont bien été modifiées"), 'alert', array (
        'plugin' => 'BoostCake', 
        'class' => 'alert-success' 
       )); 
      }else{ 
       $this->Session->setFlash(__("Impossible de modifier ou d'ajouter les infos"), 'alert', array (
        'plugin' => 'BoostCake', 
        'class' => 'alert-danger' 
       )); 
      } 
     } 

Quando ho salvare i dati, mostra l'errore.

nel mio database Ho questi 4 tavoli:

Users(id, username, mail, password, created, lastlogin, active, firstname, lastname, gender, birthdate, phonenumber) 
Cars(id, CarMake, CarModel, NumberPlate, user_id) 
Addresses(id, address, city, state, postcode, country, user_id) 
Addresses_cars(address_id, car_id) 

Questo è un esempio di quello che posso ottenere dalla forma (la variabile $ d):

array(
    'Car' => array(
     (int) 0 => array(
      'CarMake' => 'Allard', 
      'CarModel' => '2005', 
      'NumberPlate' => '56QDS1' 
     ) 
    ), 
    'User' => array(
     'id' => '1' 
    ) 
) 

non lo faccio capisci perché non funziona ... Puoi aiutarmi per favore?

Grazie! :)

EDIT: Ho provato anche con SaveAll ma non riesco a farlo funzionare .. cosa c'è che non va?

+1

"mostra l'errore", ma non viene elencato l'errore. Che errore stai ottenendo? – Dave

+0

Ha mostrato l'errore che ho scelto di mostrare in caso di errore ($ this-> Session-> setFlash (__ ("Impossibile modificare o modificare le informazioni")). In ogni caso il problema è risolto. per un altro modulo che era in conflitto con questo –

+0

Questo non è un errore, questo è un messaggio. Per domande future, assicurati di essere accurato nella descrizione e includi l'errore/messaggio effettivo in modo da non sprecare il tempo delle persone che vogliono aiuto – Dave

risposta

1

E 'già stato risolto da OP, ma per CakePHPers futuri, se si dispone di un save() o saveAll() che non è il risparmio (controllato dal if:else blocco), il problema più comune è un errore di convalida.

CakePHP 2.x Data Validation

CakePHP 3.x Data Validation

Se questo non lo è, prova a guardare qualsiasi comportamento che si sta utilizzando, e verificare la presenza di nessuna parte che dovrebbe essere il ritorno vero e non è (come nella sua `BeforeSave() metodo).

Problemi correlati