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

MkFramework Discussion :

ORM : Automatiser un retraitement sur des enregistrements


Sujet :

MkFramework

  1. #1
    Membre confirmé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    701
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 701
    Points : 597
    Points
    597
    Par défaut ORM : Automatiser un retraitement sur des enregistrements
    Salut,

    Je viens de relire le chapitre nommé : Automatiser un retraitement sur des enregistrements

    Où l'on nous expliques comment reformater une date à la récupération et/ou à l'enregistrement pour qu'elle soit compatible avec le datePicker de Jquery.
    Cela marche bien avec les Mise à jour de ligne, mais dès que je tente une création cela plante.

    C'est normale car dès que l'on appel le constructeur de la row on passe la booléen $_bChooseUpdate à true.

    Je me demandais si depuis que cet article avait été rédigé cette booléen n'aurait pas été mis en place ce qui vient plomber la donne et rendre l'article caduque pour les créations de lignes.

    A+
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !


    Albert Einstein

  2. #2
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Bonsoir,
    Il y a effectivement une subtilité, je vais corriger ce soir sur le site, c'est:
    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
     
    public function __construct($tRow=null){
     
            //on appel d'abord le constructeur normal de la row
           parent::__construct($tRow);
     
     
           //puis on modifie le champ date avant d'initialiser l'objet
           $oDate = new plugin_date($tRow['date'],'d/m/Y');
           $this->date = $oDate->toString('Y-m-d');
     
     
     
       }
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  3. #3
    Membre confirmé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    701
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 701
    Points : 597
    Points
    597
    Par défaut
    En effet c'est subtile !
    Mais c'est fonctionnel, puisque c'est résolu.

    Je te remercie
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !


    Albert Einstein

  4. #4
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Je TE remercie de cette correction

    Je répondais à un autre utilisateur je vais corriger de ce pas sur le site
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  5. #5
    Membre confirmé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    701
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 701
    Points : 597
    Points
    597
    Par défaut
    Je reviens sur ce sujet car depuis hier plus rien ne fonctionne et je ne trouve pas la raison.

    J'ai mis en place ceci :

    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
    class row_events extends abstract_row{
     
    	protected $sClassModel='model_events';
    	[...]
     
    	public function __construct($tRow=null){
     
                parent::__construct($tRow);
     
                //on modifie le champ date avant d'initialiser l'objet           
                if (is_null($tRow['date'])){
                    $tRow['date'] = date('Y-m-d',  time ());
                }
                $oDate = new plugin_date($tRow['date'],'Y-m-d');
                $tRow['date'] = $oDate->toString('d/m/Y');               
            }
    Nous sommes d'accord que je dois obtenir ma valeur date formaté selon le schéma d/m/Y.

    Un petit var_dump me le confirme.

    puisque j'obtiens cela pour mes trois principales actions :

    events::list
    array(5) { ["idEvent"]=> string(1) "1" ["nomEvent"]=> string(23) "STU 3ème Edition" ["date"]=> string(10) "23/11/2014" }

    events::new
    array(1) { ["date"]=> string(10) "09/09/2015" }

    events::edit
    array(5) { ["idEvent"]=> string(1) "3" ["nomEvent"]=> string(23) "STU 4ème Edition" ["date"]=> string(10) "22/11/2015" }
    Pourtant lorsque j'exploite ma valeur dans mes 3 vues :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    events::edit / events::new
    <div class="form-group">
    		<label class="col-sm-2 control-label">Date</label>
    		<div class="col-sm-10"><?php echo $oForm->getInputText('date',array('class'=>'form-control'))?></div>
    	</div>
     
    events::list
    <td><?php echo $oEvents->date ?></td>
    la date est toujours au format Y-m-d

    Quand j'ai résolu ce post je suis sûr que tout fonctionnait.
    Il me semble pas avoir fait de grosses modifications depuis, je suis même revenu sur des versions antérieurs et j'ai toujours les problèmes...

    Une piste ?

    Merci
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !


    Albert Einstein

  6. #6
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Essayez de faire un spy sur la variable de l'enregistrement au sein de votre foreach (dans la vue)
    Vous passez bien par un findMany et non un findManySimple ?
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  7. #7
    Membre confirmé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    701
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 701
    Points : 597
    Points
    597
    Par défaut
    Du côté model je n'ai rien changé il est brut de décoffrage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    	public function findById($uId){
    		return $this->findOne('SELECT * FROM '.$this->sTable.' WHERE idEvent=?',$uId );
    	}
    	public function findAll(){
    		return $this->findMany('SELECT * FROM '.$this->sTable);
    	}
    Donc la liste fait bien appel à un findMany, quand à l'Edit et au New elle sollicite bien un FindOne.

    Par contre il va falloir enrichir ma culture car je ne sais pas ce que veut dire :
    faire un spy sur la variable de l'enregistrement au sein de votre foreach
    Je me doute que l'on parle d'un lancement pas à pas et du foreach du list.php.
    Mais comment faire du pas à pas ?
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !


    Albert Einstein

  8. #8
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Effectivement, dans votre foreach (dans la vue list)
    ajouter un plugin_debug::addSpy('foreach',$votreObjet);

    vous retrouverez ainsi dans la barre de debug de l'application un bouton spy pour voir ces espions
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  9. #9
    Membre confirmé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    701
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 701
    Points : 597
    Points
    597
    Par défaut
    Aucune surprise le code sort bien ce qui est affiché a savoir la date en Y-m-d :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    row_events Object
    (
        [sClassModel:protected] => model_events
        [_bChooseUpdate:abstract_row:private] => 1
        [_tProperty:protected] => Array
            (
                [idEvent] => 3
                [nomEvent] => STU 4ème Edition
                [date] => 2015-11-22
                [lieux] => Saint-Etienne            
            )
     
        [_tPropertyToUpdate:protected] => 
    )
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !


    Albert Einstein

  10. #10
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    IL passerai donc pas dans le constructeur personnalisé ?
    Vous pouvez faire de même: ajouter un spy dans cette méthode construct pour voir ce qui se passe à ce moment là ?
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  11. #11
    Membre confirmé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    701
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 701
    Points : 597
    Points
    597
    Par défaut
    A ne rien y comprendre.

    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
     
    Time:0.084s                        Module:events    Action:list                
     
    Fermer
    construct
     
    Array
    (
        [idEvent] => 1
        [nomEvent] => STU 3ème Edition
        [date] => 23/11/2014
        [lieux] => Saint-Etienne
    )
     
    construct
     
    Array
    (
        [idEvent] => 3
        [nomEvent] => STU 4ème Edition
        [date] => 22/11/2015
        [lieux] => Saint-Etienne
     
    )
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !


    Albert Einstein

  12. #12
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Je pense avoir trouvé: il y a eu une ptite erreur dans les modifs indiquées dans nos échanges
    Sur votre constructeur:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public function __construct($tRow=null){
     
                parent::__construct($tRow);
     
                //on modifie le champ date avant d'initialiser l'objet           
                if (is_null($tRow['date'])){
                    $tRow['date'] = date('Y-m-d',  time ());
                }
                $oDate = new plugin_date($tRow['date'],'Y-m-d');
                $tRow['date'] = $oDate->toString('d/m/Y');               
            }

    Il faut utiliser la propriété ($this->date) et non l'indice de tableau
    ce qui donnera:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public function __construct($tRow=null){
                //on passe le tableau des proprietes a populer
                parent::__construct($tRow);
     
                //on modifie le champ date avant d'initialiser l'objet           
                if (is_null($tRow['date'])){
                    $tRow['date'] = date('Y-m-d',  time ());
                }
                $oDate = new plugin_date($tRow['date'],'Y-m-d');
                $this->date = $oDate->toString('d/m/Y');               
            }


    Pour l'explication: soit on modifie le tableau des propriétés avant de la passer au constructeur de l'objet (pour populer l'objet), soit on passe d'abord le tableau "normal" des propriétés puis on change une des propriétés de notre objet
    Dans l'exemple ci dessus: on fait le second choix
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  13. #13
    Membre confirmé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    701
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 701
    Points : 597
    Points
    597
    Par défaut
    En effet !

    ça marche de nouveau.

    Donc si je comprends bien l'explication :

    Lors d'un Edit ou d'un List : parent::__construct($tRow); charge le contenu de la table dans la variable $this pour en faire des paramètres.
    Alors que lors d'un New : parent::__construct($tRow) s'initialise juste à NULL et donc n'a aucun paramètre c'est pour ça que $tRow['date'] = date('Y-m-d', time ()) fonctionne.

    Merci.
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !


    Albert Einstein

  14. #14
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Exact

    le fait de passer un tableau au constructeur parent, passe la variable "c'est un update" à true, ce qui embettait dans le cas d'un new
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 06/03/2015, 15h55
  2. [WD9] Cliquer sur des enregistrements dans une table
    Par oz80 dans le forum WinDev
    Réponses: 2
    Dernier message: 15/12/2005, 20h11
  3. Réponses: 1
    Dernier message: 12/12/2005, 16h11
  4. Calcul de données present sur des enregistrements different
    Par logistik dans le forum Langage SQL
    Réponses: 6
    Dernier message: 04/05/2005, 16h33
  5. Réponses: 8
    Dernier message: 24/08/2004, 22h25

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