CakePHP-Fr.Org

Forum francophone du Framework CakePHP

Vous n'êtes pas identifié.

#1 17-02-2016 15:41:02

edrin17
Chouquette
Date d'inscription: 17-02-2016
Messages: 2

Comportement d'un object(Cake\ORM\Query) dans un foreach [Cake3.1]

Bonjour,

Quelqu'un pourrait-il m'expliquer pourquoi l'objet Query "$listeRotations" est modifié à chaque itération de ma boucle foreach ?

Code: php

  1. $tablePeriodes = TableRegistry::get('Periodes');
  2. $tableRotations = TableRegistry::get('Rotations');
  3.  
  4. //on cherche toutes les periodes + classement croissant par numero
  5. $listePeriodes = $tablePeriodes->find()  
  6.       ->order(['numero' => 'ASC']);
  7.    
  8. //on cherche toutes les rotations + classement
  9. $listeRotations = $tableRotations->find()
  10.       ->contain(['Periodes','Themes'])
  11.       ->order(['Periodes.numero' => 'ASC'])
  12.       ->order(['Rotations.numero' => 'ASC']);
  13.                                        
  14. foreach ($listePeriodes as $listePeriode)
  15. {
  16.   $test = $listeRotations;
  17.   $test2 = $test;
  18.   $test3 = $test2->where(['periode_id' => 'toto']);
  19. }
  20. debug($listeRotations);die;

En effet, le debug montre que toutes les closes "where" appliquées sur la variable $test2 sont répercutées sur l'object Query "$listeRotations".
Si bien que "$listeRotations" avant le foreach est différent "$listeRotations".
Comment est-ce possible et comment faire pour que la requête d'origine ("$listeRotations") reste intacte ?

Hors ligne

 

#2 18-02-2016 10:23:07

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

Re: Comportement d'un object(Cake\ORM\Query) dans un foreach [Cake3.1]

Bonjour,

Petite question : Les tables Periodes et Rotations sont liées ?

Hors ligne

 

#3 19-02-2016 00:43:23

edrin17
Chouquette
Date d'inscription: 17-02-2016
Messages: 2

Re: Comportement d'un object(Cake\ORM\Query) dans un foreach [Cake3.1]

Oui, Periodes ->HasMany->Rotations et Rotations BelongsTo -> Periodes.

Si ça peut aider... wink

Hors ligne

 

#4 19-02-2016 11:22:14

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

Re: Comportement d'un object(Cake\ORM\Query) dans un foreach [Cake3.1]

Je t'avoue que j'ai un peu de mal à comprendre ton code... smile
Tu veux récupérer quoi au final ?
Autre question 'periode_id' => 'toto' me semble étrange. Tes ids des périodes sont des valeurs non numériques (toto)? En général on a des ids du genre 1, 2, 3, ....

Voilà ce que j'imagine. Tu vas avoir les rotations qui ont l'id de période égal à toto::

Code: php

  1. $tableRotations = TableRegistry::get('Rotations');
  2. $rotations = $tableRotations->find()
  3.     ->contain(['Periodes','Themes'])
  4.     ->order(['Periodes.numero' => 'ASC'])
  5.     ->order(['Rotations.numero' => 'ASC']);
  6.     ->matching('Periodes', function ($q) {
  7.         return $q->where(['Periodes.id' => 'toto']); // changer id par le nom de la colonne où sont écrits toto et autres noms de périodes
  8.     });

Tu peux faire un debug($rotations->toArray()) pour tester.


Pour ta question:

La variable $test2 est un objet et c'est exactement le même que $listeRotations. Il est donc normal que lorsque tu fais un where() dessus, il le refasse sur cet objet modifié à chaque itération.

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB
Traduction par FluxBB.fr