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 2 Entity


Sujet :

Doctrine2 PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 36
    Points : 38
    Points
    38
    Par défaut Doctrine 2 Entity
    Bonjour,

    J'ai un problème avec une entity. En effet, j'ai l'entity TemplateElements :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    /**
     * A template_elements.
     *
     * @ORM\Entity
     * @ORM\Table(name="template_elements")
     * @property string $template_id
     * @property int $element_type
     * @property int $element_id
     * @property int $order
     */
    class TemplateElements implements InputFilterAwareInterface 
    {
     protected $inputFilter;
     
        /**
         * @ORM\Id
         * @ORM\Column(type="integer", nullable=false));
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        protected $template_id;
     
        /**
         * @ORM\Column(type="integer")
         */
        protected $order;
     
        /**
         * @ORM\Column(type="string")
         */
        protected $element_type;
     
        /**
         * @ORM\Column(type="integer") 
         */
        protected $element_id;
    Lorsque je selectionne avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resutsTemplateElements = $this->getEntityManager()->getRepository('\Questionnaire\Entity\TemplateElements')->findBy( array('template_id' => XX, 'order' => XX), array('template_id' => 'ASC'), 1000,0 );
    J'obtiens un seul attribut dans $resutsTemplateElements mais plusieurs fois (autant de fois que de voulu). Pourtant, il existe plusieurs valeurs dans la base de donnée. Mais je ne récupère que la première valeur. (Je précise qu'en réalité la table contient 4 colonnes (dont 4 clés primaires) et donc le template_id n'est pas unique.

    Je pense qu'il y un conflit avec les clés primaires de la table et donc que doctrine s'arrete de chercher une fois qu'il a trouver le template_id (car il doit considérer que c'est un ID unique)

    Merci de m'éclairer d'avantage,

    PS : Je suis débutant sur ZF2 et Doctrine2.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Bonjour,

    As tu consulté la doc sur les clés composés?
    http://docs.doctrine-project.org/pro...mary-keys.html

    Il me semble qu'il y a plusieurs problèmes:
    -> tu dis qu'il y a 4 clés primaires, mais seul template_id est mappé en tant que id
    -> tu as un attribut "template_id", vu son nom ça ressemble à une clé étrangère, donc tu devrait plutôt avoir un attribut $template qui est mappé en tant qu'association vers une entité "Template" (NB: on ne peut pas avoir les deux)
    -> cet attribut est mis en autoincrement, c'est assez étrangère pour une clé primaire composé ou tout simplement une clé étrangère.

    D'une façon générale, Doctrine supporte les clés composés ... dans une certaine limite (il y a un nombre maxi, j'avais vu un post dans ce même forum).
    De plus ça te compliquera certainement la tache, ex: une url pour les éditer avec 4 paramètres.

    Ce que je te conseille: refaire ton mapping
    -> en ajoutant une seule colonne clé primaire autoincrémenté
    -> en mappant les clés étrangères en tant qu'association
    -> Si tu veux que tes 4 clés étrangères ne puisse pas être en doublon, les contraintes d'unicité sont là pour ça: http://docs.doctrine-project.org/en/...iqueconstraint

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 36
    Points : 38
    Points
    38
    Par défaut
    Oui j'ai consulté cette doc mais elle ne m'a pas fait avancer beaucoup..

    Quand je mappe un autre attribut avec @ORM\Id, j'ai une erreur de ce type :
    Single id is not allowed on composite primary key , et je ne comprends pas pourquoi étant donné que dans ma table j'ai bien plusieurs PK...

    template_id est bien une clés étrangère mais celle-ci n'est pas renseignée comme telle dans la base de donnée. Je considère donc cet attribut comme un attribut normal. J'ai corrigé l'auto-incrément pour ce champ.

    Je comptais effectivement refaire le mapping mais le problème est que je ne peux pas vraiment modifier la base de donnée.


    Merci pour cette réponse rapide

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/04/2013, 15h53
  2. Command "doctrine:generate:entity" is not defined
    Par bunsky dans le forum Doctrine2
    Réponses: 3
    Dernier message: 20/03/2013, 10h04
  3. [2.x] doctrine:generate:entity génère une classe invalide
    Par samche dans le forum Symfony
    Réponses: 3
    Dernier message: 05/09/2012, 11h50
  4. Réponses: 1
    Dernier message: 04/01/2012, 17h26
  5. [2.x] Requete doctrine dans un __consrtuct d'Entity
    Par zeTantan dans le forum Symfony
    Réponses: 0
    Dernier message: 11/12/2011, 21h37

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