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

Symfony PHP Discussion :

Désactivation temporaire Timestampable [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2009
    Messages : 64
    Par défaut Désactivation temporaire Timestampable
    Salut a tous,

    J'ai un objet(article) , taggé en timestampable , dans lequel j'enregistre le nombre de fois que cet article a été visualisé.

    Or je viens de constater un probleme. Dès que j'ajoute 1 a mon nombre de vues, via une methode addOneView() de mon objet, et que cette méthode le sauve en bdd, mon updated_at est mis a jour.

    Ceci est logique au vu du fonctionnement de timestampable.
    J'ai donc trouvé une méthode qui permettrait de desactiver le updated_at dans quelques cas, malheureusement , ca ne semble pas fonctionner.

    la methode : http://blog.damienalexandre.fr/index...-avec-Doctrine

    Ma question : quelqu'un pourrait t-il m'informer a ce sujet ? c'est a dire : comment desactiver provisoirement le behaviour timestampable ?

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    A priori, cela m'a l'air une bonne solution, même si elle est plus pour doctrine que pour doctrine dans symfony.

    Peux-tu donner le schéma, le code de la méthode que tu as ajoutée et où tu as effectuer la greffe ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2009
    Messages : 64
    Par défaut
    schema.yml
    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
    Annonce:
      actAs:
        Timestampable:
        Sluggable:
          fields: [title]
      columns:
        id:
          type: integer(4)
          primary: true
          notnull: true
          autoincrement: true
        title:
          type: string(150)
          notnull: true
        views:
          type: integer
    puis dans article.class.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public function disableTimestampableBehavior(){
        $timestampable = $this->getListener()->get(0);
        $timestampable->setOption(array('updated' => array('disabled' => true)));
     
      }
     
    public function addOneView(){
        $this->disableTimestampableBehavior();
        $this->views = $this->views + 1;
        $this->save();
      }
    je ne savais pas qu'il y'avait une différence entre doctrine tout court et doctrine pour symfony...

  4. #4
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Peut-être un problème de cache ? Tu devrais pouvoir désactiver cette fonctionnalité sans même entrer dans le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // schema.yml: 
    Modele: 
        actAs:
          Timestampable :
            updated: { disabled:  true }
     
    // console
    php symfony doctrine:build-model
    php symfony doctrine:build-form
    php symfony doctrine:cc
    NB : solution valable uniquement si tu ne fais pas un build-all là dessus car cela te supprimerait la colonne 'updated_at' en base

  5. #5
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2009
    Messages : 64
    Par défaut
    j'y avais pas pensé a la desactivation
    du coup , faudra que je mette ce champ a jour a la main si j'ai tout compris ?

  6. #6
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Heu.... non, pourquoi ?

    J'ai fait cela sur une table dont le modèle était déclaré Timestampable avec toutes les options :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Modele:
      actAs: [Timestampable]
    J'ai donc une colonne updated_at dans ma table, avec les dates qui vont bien.

    Maintenant, si je désactive temporairement ce comportement et que je modifie un de mes enregistrements, le timestamp ne change pas dans la colonne updated_at : l'ancien timestamp est toujours en base.

    Et si je reviens au paramétrage initial de schema.yml, le comportement normal (mise à jour du timestamp) reprend.

    Ou alors je n'ai pas compris ce que tu cherchais à faire ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2009
    Messages : 64
    Par défaut
    J'ai l'impression que tu n'a pas compris , ou alors c'est moi qui ne comprends pas ce que tu as écris

    Je veux desactiver la mise a jour de updated_at seulement dans une méthode (addOneView) de ma classe article.

    Est ce bien ce que tu avais compris ?

  8. #8
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2009
    Messages : 64
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      public function disableDoctrineTimestampableBehaviour(){
        $timestampable = $this->getListener()->get(0);
        $timestampable->setOption(array('updated' => array('disabled' => true)));
      }
    C'etait bien la bonne méthode, il me manquait juste le clear cache.

    Merci tout le monde

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

Discussions similaires

  1. Désactivation temporaire des MouseListener
    Par jey#7 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 30/04/2009, 23h08
  2. [ComboBox] Comment désactiver temporairement le SelectionChanged ?
    Par Thrud dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 16/09/2008, 13h15
  3. Désactiver temporairement un Sub[. . .]Handles ?
    Par g0ldenrno dans le forum Windows Forms
    Réponses: 2
    Dernier message: 09/05/2007, 14h35
  4. désactiver temporairement un validator
    Par tiboleo dans le forum ASP.NET
    Réponses: 1
    Dernier message: 08/02/2007, 16h03
  5. [10gR1] Désactivation temporaire des contraintes
    Par Cereal123 dans le forum Oracle
    Réponses: 2
    Dernier message: 09/10/2006, 14h04

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