IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

Mettre a jour plusieurs lignes d'un modèle [CakePHP]


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre expérimenté

    Homme Profil pro
    kiné passionné de dev
    Inscrit en
    Mars 2006
    Messages
    1 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : kiné passionné de dev

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 570
    Points : 1 738
    Points
    1 738
    Billets dans le blog
    1
    Par défaut Mettre a jour plusieurs lignes d'un modèle
    Bonjour,

    je crée un site sur lequel je voudrais pouvoir modifier plusieurs lignes d'un modèle:

    - il y a le modèle Region qui est lié par un hasMany au modèe Echelon
    - le modèle Echelon lié au modèle Region par un belongsTo

    Je voudrais pouvoir modifier tous les echelons sur une seule page, en un coup.

    Voilà mon code au niveau controller:
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    	public function edit($id = null){
    		if (!$id) {
    			throw new NotFoundException(__('Région invalide'));
    		}
     
    		$Region = $this->loadModel('Region',$id);
    		if(!$Region){
    			throw new NotFoundException(__('Région invalide'));
    		}
     
    		if ($this->request->is(array('post','put'))) {
    			$this->Region->id = $id;
    /*
    			if ($this->Region->save($this->request->data)) {
    				$this->Session->setFlash(__('Région mise à jour'));
    				return $this->redirect(array('action'=>'index'));
    			}
    */
    			$this->Session->setflash(__('Impossible de mettre les échelons.'));
    		}
    		$this->Echelon->unbindModel(
            array('belongsTo' => array('Region')));
     
    		$echelons = $this->Echelon->findAllByRegion_id($id);
     
    		if (!$this->request->data) {
     
    			$this->request->data = $echelons;
    		}
    		$this->set('echelons', $echelons);
    	}

    et le code de ma vue :

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <!-- Fichier : /app/View/Echelons/edit.ctp -->
     
    <h1>Editer les &eacute;chelons</h1>
    <?php
    echo $this->Form->create('Echelon');
    echo $this->Form->input('Region.id',array('type'=>'hidden'));
    $i = 0;
    foreach ($echelons as $echelon) {
    	echo $this->Form->input('Echelon.'.$i.'.id',array('type'=>'hidden'));
    	echo $this->Form->input('Echelon.'.$i.'.region_id',array('label'=>'Region id'));
    	echo $this->Form->input('Echelon.'.$i.'.echelon', array('label'=>'Echelon'));
    	echo $this->Form->input('Echelon.'.$i.'.montant',array('label'=>'Montant'));
    	$i++;
    }
    echo $this->Form->end('Sauvegarder');

    Le tout me crée un truc super moche en HTML (fraction à multiplier par le nombre de boucle):

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <h1>Editer les &eacute;chelons</h1>
    <form action="/cakephp/Echelons/edit/1" id="EchelonEditForm" method="post" accept-charset="utf-8"><div style="display:none;"><input type="hidden" name="_method" value="POST"/></div><input type="hidden" name="data[Region][id]" id="RegionId"/><input type="hidden" name="data[Echelon][0][id]" id="Echelon0Id"/><div class="input select required"><label for="Echelon0RegionId">Region id</label><select name="data[Echelon][0][region_id]" id="Echelon0RegionId" required="required">
    </select></div><div class="input select"><label for="Echelon0Echelon">Echelon</label><select name="data[Echelon][0][echelon]" id="Echelon0Echelon">
    </optgroup>
    <option value="montant">394</option>
    <option value="echelon">0</option>
    <optgroup label="Echelon">
    <optgroup label="1">
    </optgroup>
    <option value="montant">1496</option>
    <optgroup label="Echelon">
    </optgroup>
    <optgroup label="2">
    </optgroup>
    <option value="montant">2253</option>
    <option value="region_id">1</option>
    <optgroup label="Echelon">
    </optgroup>
    <optgroup label="3">
    </optgroup>
    <option value="montant">2887</option>
    <option value="region_id">1</option>
    <optgroup label="Echelon">
    </optgroup>
    <optgroup label="4">
    </optgroup>
    <option value="montant">3519</option>
    <option value="region_id">1</option>
    <optgroup label="Echelon">
    </optgroup>
    <optgroup label="5">
    </optgroup>
    <option value="montant">4040</option>
    <option value="region_id">1</option>
    <optgroup label="Echelon">
    </optgroup>
    <optgroup label="6">
    </optgroup>
    <option value="montant">6300</option>
    <option value="region_id">1</option>
    <option value="id">7</option>
    <optgroup label="Echelon">
    </optgroup>


    Donc, ma question est: je n'ai jamais voulu tous ces optgroups, et je ne vois pas trop d'où vient le problème, vous pourriez m'aider?

  2. #2
    Membre expérimenté

    Homme Profil pro
    kiné passionné de dev
    Inscrit en
    Mars 2006
    Messages
    1 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : kiné passionné de dev

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 570
    Points : 1 738
    Points
    1 738
    Billets dans le blog
    1
    Par défaut
    j'ai un début de solution :

    tous les optgroup venait d'une erreur créée par cakephp du fait que l'un de mes champs avait le même nom que le modèle.

    A présent, je n'ai plus tous ces optgroup, mais les valeurs ne s'affichent pas dans les champs...

  3. #3
    Membre expérimenté

    Homme Profil pro
    kiné passionné de dev
    Inscrit en
    Mars 2006
    Messages
    1 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : kiné passionné de dev

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 570
    Points : 1 738
    Points
    1 738
    Billets dans le blog
    1
    Par défaut
    Au final, j'ai trouvé la solution à omon problème:

    il faut envoyer les données au formulaire par $this->request->data = $mesDonnees, sinon ça ne fonctionne pas.
    voilà à quoi ressemble mon code a présent, un écrit vaut mieux qu'une longue explication:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    	public function edit($id = null){
    		if (!$id) {
    			throw new NotFoundException(__('Région invalide'));
    		}
     
    		$Region = $this->loadModel('Region',$id);
    		if(!$Region){
    			throw new NotFoundException(__('Région invalide'));
    		}
     
    		if ($this->request->is(array('post','put'))) {
    			$this->Region->id = $id;
     
    			if ($this->Region->saveAssociated($this->request->data)) {
    				$this->Session->setFlash(__('Echelons mis a jour'));
    				return $this->redirect(array('action'=>'index'));
    			}
     
    			$this->Session->setflash(__('Impossible de mettre les échelons à jour.'));
    		}
    		//$this->Echelon->unbindModel(array('belongsTo' => array('Region')));
     
    		if (!$this->request->data) {
     
    			$this->request->data = $this->Region->findById($id);
    		}
    	}
    Je suis passé par le modèle région pour mettre a jour les données des échelons, car chaque échelon était mis a jour selon la région

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <!-- Fichier : /app/View/Echelons/edit.ctp -->
     
    <h1>Editer les &eacute;chelons</h1>
     
    <?php
    echo $this->Form->create('Echelon');
    echo $this->Form->input('Region.id',array('type'=>'hidden'));
     
    $echelon_count = count($this->request->data['Echelon']);
    for($i=0; $i < $echelon_count;$i++){
    	echo $this->Form->input('Echelon.'.$i.'.id',array('type'=>'hidden'));
    	echo $this->Form->input('Echelon.'.$i.'.region_id',array('label'=>'Region id','type'=>'hidden'));
    	echo $this->Form->input('Echelon.'.$i.'.num_echelon', array('label'=>'Echelon'));
    	echo $this->Form->input('Echelon.'.$i.'.montant',array('label'=>'Montant'));
    }
    echo $this->Form->end('Sauvegarder');
    L'affichage du bon nombre d'input

    Et le code HTML de la fin est normal.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Mettre à jour plusieurs ligne de la bdd en même temps
    Par subran dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 09/06/2014, 12h27
  2. Mettre à jour plusieurs lignes d'une table
    Par beegees dans le forum Langage
    Réponses: 5
    Dernier message: 15/10/2008, 18h09
  3. [Procédure Stockée] mettre à jour plusieurs lignes
    Par PoichOU dans le forum Langage SQL
    Réponses: 15
    Dernier message: 16/05/2007, 16h18
  4. Procédure mettre à jour plusieurs lignes
    Par JEFF56 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/05/2006, 10h53
  5. Mettre a jour plusieurs lignes d'une table
    Par Tartenpion dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/12/2005, 18h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo