Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/11/2010, 15h46   #1
Invité régulier
 
Mathieu
Inscription : janvier 2009
Messages : 57
Détails du profil
Informations personnelles :
Nom : Mathieu
Localisation : France

Informations forums :
Inscription : janvier 2009
Messages : 57
Points : 8
Points : 8
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 ?
optiloose est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 16h24   #2
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
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 ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 16h30   #3
Invité régulier
 
Mathieu
Inscription : janvier 2009
Messages : 57
Détails du profil
Informations personnelles :
Nom : Mathieu
Localisation : France

Informations forums :
Inscription : janvier 2009
Messages : 57
Points : 8
Points : 8
schema.yml
Code :
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 :
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...
optiloose est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 16h37   #4
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 767
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 767
Points : 785
Points : 785
Peut-être un problème de cache ? Tu devrais pouvoir désactiver cette fonctionnalité sans même entrer dans le code :

Code :
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
Herode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 16h40   #5
Invité régulier
 
Mathieu
Inscription : janvier 2009
Messages : 57
Détails du profil
Informations personnelles :
Nom : Mathieu
Localisation : France

Informations forums :
Inscription : janvier 2009
Messages : 57
Points : 8
Points : 8
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 ?
optiloose est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 16h45   #6
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 767
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 767
Points : 785
Points : 785
Heu.... non, pourquoi ?

J'ai fait cela sur une table dont le modèle était déclaré Timestampable avec toutes les options :
Code :
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 ?
Herode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 16h48   #7
Invité régulier
 
Mathieu
Inscription : janvier 2009
Messages : 57
Détails du profil
Informations personnelles :
Nom : Mathieu
Localisation : France

Informations forums :
Inscription : janvier 2009
Messages : 57
Points : 8
Points : 8
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 ?
optiloose est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 16h51   #8
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 767
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 767
Points : 785
Points : 785
Ha, seulement dans une méthode.
Oups, autant pour moi, ma réponse est hors sujet en ce cas. Désolé ^^
Herode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 17h48   #9
Invité régulier
 
Mathieu
Inscription : janvier 2009
Messages : 57
Détails du profil
Informations personnelles :
Nom : Mathieu
Localisation : France

Informations forums :
Inscription : janvier 2009
Messages : 57
Points : 8
Points : 8
Code :
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
optiloose est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h37.


 
 
 
 
Partenaires

Hébergement Web