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 :

Relation ManyToOne et nullable


Sujet :

Doctrine2 PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Par défaut Relation ManyToOne et nullable
    Bonsoir,

    Je bute sur un problème depuis le début de journée sans trouver de réponse. Je pencherai pour un bug Doctrine2 mais bref, voici le problème.

    J'ai une entité Fiche_client_infos qui me sert de "Reporting" pour mes fiches clients (qui sont également des entités) en ayant différentes entités en relation ManyToOne. Pour chaque familles, elle me permet de connaitre fabricant, produit, négociant et poseur concerné (je ne rentre pas plus dans les détails).

    Ma problématique : certaines familles n'ont par exemple que le fabricant et le produit de renseignés (et aucun négociant et poseur). Je décide donc de mettre ces champs en nullable avec annotations Doctrine2 mais lors de la génération de la base, je me retrouve avec des VARCHAR(255) qui correspondent à des string en php. J'ai essayé de forcer les champs en integer mais j'ai une erreur de Doctrine lors de la création (persistence) d'une entité qui me dit que mes entités "fabricant" ne peuvent pas être casté en String (je ne sais pas d'ou vient le fait que ce soit String, peut être à cause du nullable...).

    Voici mon entité Fiche_client_infos :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    namespace cgie\MLBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
     
    /**
     * cgie\MLBundle\Entity\Fabricant_favoris
     *
     * @ORM\Table()
     * @ORM\Entity(repositoryClass="cgie\MLBundle\Entity\Fiche_client_infosRepository")
     */
    class Fiche_client_infos{
     
        /**
         * @ORM\Id
         * @ORM\ManyToOne(targetEntity="cgie\MLBundle\Entity\Fiche_client")
         */
        private $fiche_client;
     
        /**
         * @ORM\Id
         * @ORM\ManyToOne(targetEntity="cgie\MLBundle\Entity\Famille")
         */
        private $famille;
     
        /**
         * @ORM\ManyToOne(targetEntity="cgie\MLBundle\Entity\Fabricant")
         * @ORM\Column(nullable=true)
         */
        private $fabricant;
     
        /**
         * @ORM\ManyToOne(targetEntity="cgie\MLBundle\Entity\Produit")
         * @ORM\Column(nullable=true)
         */
        private $produit;
     
        /**
         * @ORM\ManyToOne(targetEntity="cgie\MLBundle\Entity\Negociant")
         * @ORM\Column(nullable=true)
         */
        private $negociant;
     
        /**
         * @ORM\ManyToOne(targetEntity="cgie\MLBundle\Entity\Poseur")
         * @ORM\Column(nullable=true)
         */
        private $poseur;
    Suis-je le seul à avoir ce problème ou est-ce une erreur de ma part svp ? Une relation ManyToOne ne peut-elle être pas Nullable ?

    Merci d'avance.

  2. #2
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Santé

    Informations forums :
    Inscription : Août 2006
    Messages : 55
    Par défaut
    Essaie de remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @ORM\Column(nullable=true)
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @ORM\JoinColumn(referencedColumnName="id", nullable=true)
    ça devrait fonctionner.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Par défaut
    J'ai résolu le problème en supprimant l'annotation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @ORM\Column(nullable=true).
    Par défaut, j'ai donc bien mes fabricants et autres, liés aux bons id des tables correspondants et avec la possibilité qu'ils soit NULL.

    Je pense qu'ajouter l'annotation CaraG33k est également bonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @ORM\JoinColumn(referencedColumnName="id", nullable=true)
    J'espère que ce sujet aura aidé d'autres personnes. Merci à CaraG33k également pour son aide.

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

Discussions similaires

  1. ejb 3 relation ManyToOne bi direction
    Par johnjjj dans le forum Java EE
    Réponses: 1
    Dernier message: 05/04/2011, 08h03
  2. Réponses: 1
    Dernier message: 17/10/2010, 19h08
  3. Relation @ManyToOne sans FK
    Par guilloman dans le forum JPA
    Réponses: 0
    Dernier message: 21/06/2010, 08h37
  4. Réponses: 12
    Dernier message: 27/05/2010, 20h01
  5. Réponses: 3
    Dernier message: 03/04/2008, 19h16

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