CakePHP-Fr.Org

Forum francophone du Framework CakePHP

Vous n'êtes pas identifié.

#1 28-02-2016 13:32:22

alex8276
Pitivier
Date d'inscription: 25-01-2014
Messages: 10

Insertion de données dans plusieurs tables

Bonjour à tous,
Je suis en train d'essayer d'apprendre a utiliser cakephp.
Pour cela j'essaye de "migrer" un début d'appli que j'avais commencé en php classique vers cakephp.

Je me pose une question sur comment inserer des données dans plusieurs tables en une seule "action". (clique sur un bouton).
Mon programme est un carnet de musculation. Pour ajouter une séance voici comment je procède:
Mon controleur:

Code: php

  1. if(isset($_POST)){
  2.   var_dump($_POST);
  3.   echo '------------</br>';
  4.  
  5.   $m = new Seance(['commentaire'=>'Nouvelle seance', 'dateSeance'=>'2015-12-18']);
  6.  
  7.   foreach($_POST as $s){
  8.     $e = new Exercice(['idExercice'=>$s['id']]);
  9.     for($i=0;$i<$taille;$i++){
  10.       echo $s['rep'][$i].'x'.$s['charge'][$i] .'</br>';
  11.       $rep = $s['rep'][$i] ; $charge = $s['charge'][$i] ;
  12.       $serie = new Serie(['nbRep'=>$rep, 'charge'=>$charge ]);
  13.       $e->ajoutSerie($serie);
  14.     }
  15.  
  16.     $m->ajoutExercice($e);
  17.     echo '-----------</br>';
  18.   }
  19.  
  20.  
  21.   $manager->add($m);
  22.    
  23. }

Et mon manager:

Code: php

  1.   public function add(Seance $seance){
  2.  
  3.     // Requete d'insertion d'une nouvelle séance
  4.     $q = $this->_db->prepare('INSERT INTO seance SET
  5.         commentaire = :com, idUser = :idUser, idSport = :idSport, dateSeance = :date_s;');
  6.  
  7.     $q ->bindValue(':com' , $seance->getCommentaire());
  8.     $q ->bindValue(':idUser', 1, PDO::PARAM_INT);
  9.     $q ->bindValue(':idSport', 1,PDO::PARAM_INT);
  10.     $q ->bindValue(':date_s', $seance->getDateSeance());
  11.  
  12.     $q->execute();
  13.  
  14.  
  15.    
  16.     $exos= $seance->getListExercice(); // On récupère la liste des exos qui composent la séance
  17.     foreach($exos as $exo){
  18.       var_dump($exo);
  19.       $lesSeries = $exo->getList();// Pour chaque exercice, on récupere dans lesSeries, la liste des séries de l'exercice
  20.       $q = $this->_db->prepare('INSERT INTO composer SET
  21.               idSeance = :idSeance, idExercice = :idExercice');
  22.       $q -> bindValue(':idSeance', $idSeance, PDO::PARAM_INT);
  23.       $q -> bindValue(':idExercice', $exo->getIdExercice(), PDO::PARAM_INT);
  24.       $q -> execute();
  25.       foreach($lesSeries as $serie){
  26.         // Requete d'insertion de chaque série
  27.         $q = $this->_db->prepare('INSERT INTO serie SET nbRep = :nbRep, charge = :charge, idSeance = :idSeance, idExercice = :idExercice');
  28.         $q->bindValue(':nbRep', $serie->getNbrep(), PDO::PARAM_INT);
  29.         $q->bindValue(':charge', $serie->getCharge(), PDO::PARAM_INT);
  30.         $q->bindValue(':idSeance', $idSeance, PDO::PARAM_INT);
  31.         $q->bindValue(':idExercice', $exo->getIdExercice(), PDO::PARAM_INT);
  32.  
  33.         $q->execute();
  34.       }
  35.     }
  36.   }

Donc en gros, j'ai mes classes seance, exercice et serie qui sont construite lors de la validation d'un formulaire. Puis mon manager décompose pour insérer dans les bonnes tables les bonnes données.

Comment procéder avec cakephp pour avoir ce genre de comportement ?
J'espere ne pas etre confus si non ne pas hésité a demander des infos.

Merci

Hors ligne

 

#2 12-04-2016 11:13:24

cake17
Cooker
Date d'inscription: 29-03-2012
Messages: 382
Site web

Re: Insertion de données dans plusieurs tables

Bonjour,

Je peux te conseiller la lecture de la doc http://book.cakephp.org/3.0/fr/orm/associations.html et toute la partie de l'ORM. Très grossièrment, il faudrait que tu crées des tables classes SeancesTable ExercicesTable et SeriesTable avec l'outil bake qui va le faire à partir des tables de ta base de données. Il faudra en revanche que tu modifies peut-être les noms de champ si tu veux que bake construise cela de façon automatique. Par exemple, les ids de réferences s'écrivent sport_id au lieu de idSport.

Les liaisons se font dans ces nouvelles classes. Le mieux je pense est de faire un des tutos de la doc pour voir le fonctionnement http://book.cakephp.org/3.0/fr/tutorial … mples.html

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB
Traduction par FluxBB.fr