2015-06-27 12 views
6

Ben CakePHP 2.6.7 kullanıyorum.CakePHP 2.6.7 hasMany Veri kaydedilmedi

Bir kullanıcı profiline birden çok araba ve birden çok adres ekleyebilecek. Aynı zamanda birden fazla adresi tek bir araca bağlayabilir ve bir adresi birden fazla araca bağlayabilir.

Sonra bir kullanıcı modeli vardır:

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

sahip bir araba modeli:

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

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

Bir Bir Adres modeli:

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

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

O kadar bir form var Kullanıcı araçlarını (sadece şu an için bir tane) düzenleyebilir:

[...]

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

şey benim veritabanına verileri kaydetmek olamaz olmasıdır. Ben verileri kaydetmek zaman

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

, bu hata gösterir: İşte Kullanıcı kontrolör kod parçasıdır.

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

I do not:

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) 

Bu benim ($ d değişken) formundan alabilirsiniz ne bir örnek: Benim veritabanında

Bunları 4 tablolar neden işe yaramadığını anlayın ... Bana yardım edebilir misiniz?

Teşekkür ederiz! :)

DÜZENLEME: Ayrıca SaveAll ile denedim ama işe yaramaya çalışmıyorum .. sorun ne?

+1

"hatayı gösterir", ancak sonra hatayı listelemezsiniz. Ne hatayı alıyorsun? – Dave

+0

Hata durumunda göstermeyi seçtiğim hatayı gösterdi ($ this-> Session-> setFlash (__ ("Impossible de modifier ou d'ajouter les infos")) Her neyse, problem çözüldü. bununla çelişen başka bir form için –

+0

Bu bir hata değil - bu bir mesajdır.İleri sorularınız için, açıklamanızda doğru olduğundan emin olun ve gerçek hata/mesajı ekleyin, böylece insanların zamanını harcamak için zaman kaybetmeyiniz. – Dave

cevap

1

Zaten OP tarafından çözüldü, ama varsa gelecek CakePHPers için, (sizin if:else bloğu tarafından kontrol) tasarrufu olmayan bir save() veya saveAll(), en sık karşılaşılan sorun bir doğrulama hatasıdır.

CakePHP 2.x Data Validation

CakePHP 3.x Data Validation

o değil ise, kullandığınız herhangi davranışlar bakmayı deneyin ve) (true dönen olması ve `BeforeSave var gibi (değil gerektiğini her yerde kontrol yöntem).