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 :

gestion de clefs étrangère avec doctrine en annotation


Sujet :

Symfony PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 124
    Points : 71
    Points
    71
    Par défaut gestion de clefs étrangère avec doctrine en annotation
    Bonjour,

    j'ai crée 2 table pour ajouter soi des motos soi des voiture.

    table: image et type véhicule

    image: id url alt foeign_key

    vehicule: id type

    j'ai déclaré un ManyToOne sur image qui pointe vers véhicule.

    Hors le foreign_key dans image me retourne l'id correspondant de mon type de véhicule ce trouvant dans véhicule.

    exemple: une voiture id1 une moto id2

    je voudrais alimenter le foreign_key avec voiture ou moto et non l'id.

    en php je le fais très bien hors en doctrine j'y comprends rien la dessus.

    Peut on désigner une autre colonne que l'id et pourquoi direct une key est en int.

    Sinon avec l'id de ma clef, set les élément c'est bien mais comment faire un find pour via la clef récupérer uniquement les photos des voiture es en 1 ou uniquement les motos en 2.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
         * @ORM\ManyToOne(targetEntity="voiture\voitureBundle\Entity\marque", cascade={"persist"})
         * @ORM\JoinColumn(name="vehiculeType", referencedColumnName="marque")
    j'ai tenté de modifier la ref id par marque colonne que je veux récupérer et plantage à la création de la table.

    Ce que doctrine me fait:
    Nom : symfony.JPG
Affichages : 488
Taille : 19,8 Ko

    ce que je souhaiterais

    Nom : php.JPG
Affichages : 474
Taille : 20,2 Ko

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Que la clé étrangère soit l'id n'est pas un problème pour faire ta requête :
    Tu aura quelque chose dans ce style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public function getVoitureAvecMarque($nomMarque) 
    {
        $query = $this->createQueryBuilder('v')
            ->leftJoin('v.marque', 'r')
            ->where('r.nom= :nomMarque')
            ->setParameter('nomMarque', $nomMarque)
            ->getQuery();
     
        return $query->getResult();
    }
    Tu devrait lire la partie dotrine de la documentation Symfony dans un premier temps :
    http://symfony.com/fr/doc/current/book/doctrine.html
    Et plus généralement la documentation sur le query builder de doctrine :
    http://docs.doctrine-project.org/pro...y-builder.html
    Et peut-être revoir les base de SQL sur les requêtes avec jointure.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 124
    Points : 71
    Points
    71
    Par défaut
    Merci beaucoup pour toute ces infos.

    Oui il est vrai que je vais me pencher plus concrètement sur le sujet, car entre les méthodes dite "classique" (findBy....) des méthodes repository "getSingleresult..." et les annotations via les entrées entre autre many bidirectionnel ou non, y a de quoi perdre la tête.

    pour une condition sur mon marque_id se trouvant dans la table image, j'ai fait ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	public function myFindCondition($marque)
    	{
    		return $this->createQueryBuilder("i")
    				->where("i.marque = '$marque'")
    				->getQuery()->getResult();
    	}
    Par contre dans le controller avec un findBy par exemple est ce possible sans passer par un repository?

Discussions similaires

  1. Compter les itérations d'un champ avec clef étrangère
    Par LordVoid dans le forum Débuter
    Réponses: 1
    Dernier message: 07/09/2010, 15h56
  2. Clés étrangères avec Doctrine
    Par tsvtsv dans le forum ORM
    Réponses: 3
    Dernier message: 19/08/2010, 17h03
  3. Gestion des dates avec doctrine
    Par chabbey dans le forum ORM
    Réponses: 1
    Dernier message: 25/07/2010, 18h29
  4. Création du scaffold avec double clef étrangère sur la même table
    Par BakaOnigiri dans le forum Ruby on Rails
    Réponses: 4
    Dernier message: 17/12/2009, 23h32
  5. Problème avec clefs étrangères
    Par tomy29 dans le forum Hibernate
    Réponses: 5
    Dernier message: 05/11/2008, 18h42

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