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

Doctrine2 PHP Discussion :

Doctrine - Getmanager - Repository


Sujet :

Doctrine2 PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

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

    Informations forums :
    Inscription : Février 2014
    Messages : 7
    Par défaut Doctrine - Getmanager - Repository
    Bonjour,
    J'ai un problème de compréhension quant à la logique de Symfony2.
    Je tente un site avec 2 pages. J'ai un traitement de BDD commun dans chacune de ces pages.
    J'ai donc créé un service afin de ne pas dupliquer ce traitement.
    Il s'agit donc d'utiliser Doctrine dans un service et non dans un "controller".
    Dans ce service, je vérifie l'existence de l'individu dans mon fichier. S'il existe je récupère un compteur et je luis ajoute 1. S'il n'existe pas, je le crée avec le compteur à 1.
    Traitement simple en soi.
    D'après les différents tutoriels que j'ai lu, il semblerait que Doctrine sache créer mais qu'il faille utiliser Repository pour extraire l'enregistrement.
    J'ai donc mis ma requête de lecture (select) dans fichierRepository. Cela semble fonctionner.
    J'ai mis ma requête d'ajout dans mon service et non dans le Repository puisque c'est Doctrine qui crée.
    Déjà là, je ne sais pas si c'est correcte ou si je suis en train de me compliquer l'existence ?
    Là ou cela se gâte c'est dans les appels:
    dans Resources/config/services.yml je passe l'argument "Doctrine"
    dans mon service
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public function __construct($em){
                            $this->em=$em->getManager();
    Ensuite j'appelle ma requête de lecture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $repository = $this->em->getRepository('claudeTestBundle:visiteurs');
                      $retour_count = $repository->nbrvisit($visiteur, $page);
    Il semblerait que cette requête s'exécute.
    Je dois maintenant appeler ma requête d'ajout si $retour_count < 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if ($retour_count < 1) {			
    			$ajout = $this->ajvisit($visiteur, $page, $provenance, $time);			
    	}
    cette requête est intégrée dans mon service et non dans le Repository comme la précédente.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private function ajvisit($visiteur, $page, $prov, $time)
    {		
    		$visit = $this->em->getRepository('claudeTeletravailBundle:visiteurs');
    		$visit = new visiteurs();
     
       		$visit->setip($visiteur);		
    		$visit->setcompteur(1);		
     
    		$em->persist($visit);    
    		$em->flush();		
    }
    Quelque soit ce que je mets comme chemin, soit il ne trouve pas la classe visiteurs soit il m'indique une mauvaise méthode pour Doctrine !!!
    J'ai essayé : $em = $this->getDoctrine()->getManager();
    $this->em=$em->getManager();
    $this->em->getRepository('claudeTeletravailBundle:visiteurs'); pour lui donner le chemin de mon entité

    Si quelqu'un pouvait m'expliquer ce qui pêche dans ma logique, je lui en serais reconnaissant.
    merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Par défaut
    Bonjour,

    je n'utilise pas Doctrine avec Symfony donc je ne serais pas spécialement utile là-dessus (c'est un peu dommage d'ailleurs que le forum Doctrine2 soit une sous-catégorie de Symfony2) mais si c'est un framework MVC, j'aurais tendance à dire que les fonctions de gestion de base de données devraient se trouver à priori dans des models, ces models pouvant ensuite être appelés par des contrôleurs, des librairies, des services ou que sais-je. Après je ne connais quasiment pas ce framework, donc peut-être qu'un service est peut-être le bon endroit pour manipuler les outils de Doctrine mais pour moi on devrait tout trouver d'abord dans des models.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

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

    Informations forums :
    Inscription : Février 2014
    Messages : 7
    Par défaut
    Merci de ton avis. C'est vrai que Doctrine créant dans un environnement et lisant dans un autre me perturbe.
    Le modèle MVC effectivement permet de regrouper toutes les fonctions de BDD dans un modèle. C'est plus clair.
    Là je te rejoins...

Discussions similaires

  1. [2.x] fonction repository->find() doctrine
    Par strauss69400 dans le forum Symfony
    Réponses: 2
    Dernier message: 10/09/2014, 14h19
  2. Réponses: 1
    Dernier message: 13/02/2006, 03h13
  3. Gestion de repository avec Subversion
    Par GLDavid dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 24/01/2006, 10h13
  4. [DeveloperSuite10g] Pb installation Repository
    Par heffer69 dans le forum Designer
    Réponses: 3
    Dernier message: 01/07/2005, 18h35
  5. [repository] [plug in]
    Par scape dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 24/08/2004, 14h05

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