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?
    Petit poulain devient grand de jour en jour...

    Petit Poulain, ce n'est que pour les intimes!

  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...
    Petit poulain devient grand de jour en jour...

    Petit Poulain, ce n'est que pour les intimes!

  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.
    Petit poulain devient grand de jour en jour...

    Petit Poulain, ce n'est que pour les intimes!

+ 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