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 :

Pb de persistence SF2/Doctne2


Sujet :

Symfony PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 174
    Points : 80
    Points
    80
    Par défaut Pb de persistence SF2/Doctne2
    Bonjour aux spécialistes sf2/Dtne 2, j'ai un pblme que je n'arrive pas à résoudre. Je voudrais votre avis. j'obtiens cet erreur lors de la sauvergarde d'un objet et de ses dépendances
    Property "generalParameters" is not public in class "App\BackofficeBundle\Entity\Culture". Maybe you should create the method "setsetGeneralParameters()"
    la problematique est la suivante:
    dans l'entité Culture on trouve ceci:
    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
     
        /**
         * @var GeneralParameters
         *
         * @ORM\ManyToMany(targetEntity="GeneralParameters", inversedBy="culture",  cascade={"persist", "remove"})
         * @ORM\JoinTable(name="culture_document",
         *   joinColumns={
         *     @ORM\JoinColumn(name="culture_id", referencedColumnName="id")
         *   },
         *   inverseJoinColumns={
         *     @ORM\JoinColumn(name="general_parameters_id", referencedColumnName="id")
         *   }
         * )
         */
        private $generalParameters;
     
        public function __construct()
        {
            $this->generalParameters = new \Doctrine\Common\Collections\ArrayCollection();
        }
     
       /**
         * Add generalParameters
         *
         * @param App\BackofficeBundle\Entity\GeneralParameters $generalParameters
         */
        public function addGeneralParameters(\App\BackofficeBundle\Entity\GeneralParameters $generalParameters)
        {
            $this->generalParameters[] = $generalParameters;
        }
    ensuite dans l'entité que je tente de persisté après soumission du formulaire on trouve ceci:
    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
     
     /**
         * @var Culture
         *
         * @ORM\ManyToMany(targetEntity="Culture", mappedBy="generalParameters",  cascade={"persist", "remove"})
         */
        private $culture;
     public function __construct()
        {
            $this->culture = new \Doctrine\Common\Collections\ArrayCollection();
        }
     
        /**
         * Add culture
         *
         * @param App\BackofficeBundle\Entity\Culture $culture
         */
        public function addCulture(\App\BackofficeBundle\Entity\Culture $culture)
        {
            $this->culture[] = $culture;
        }
    et dans le controleur:
    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
    $generalParametersForm = new GeneralParametersType();
     
            $generalParameter = new  GeneralParameters();
     
            $culture = new Culture();
            $culture->addGeneralParameters($generalParameter);
            $generalParameter->addCulture($culture);
     
     $form = $this->get('form.factory')->create($generalParametersForm);
     
            $form->setData($generalParameter);
     
            $request = $this->get('request');
     
            if ($request->getMethod() === 'POST') {
                $form->bindRequest($request);
     
                if ($form->isValid()){
                   $em = $this->getDoctrine()->getEntityManager();
                   $em->persist($form->getData());
                   $em->flush();
     
                   return $this->redirect($this->generateUrl('generalparameters_show', array('id' => $generalParameter->getId())));
     
                }
            }
    ahh p-e mettre aussi le formulaire imbriqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ->add('culture', 'collection', array('type' => new CultureType()))
    Voilà j'ai l'impression de m'etre tendu un piege tout seul avec doctrine2 qui m'a généré le AddCulture pour gérer la relation entre culture et generalParameters.

    a savoir seul la table generalParameters comptre une clé etrangere culture_id, la table culture elle ne compte qu'une colonne id et uen colonne name.

    Si vous avez des pistes, des solutions je suis preneur.

    Cordialement
    Lexter
    ps: question idiote, puis je faire une methode setGeneralParameters ou setGgeneralParametersId dans l'entité culture alors que la table correspondante n'a pas de champ generalParametersId ou alors devrait il y en avoir un? emcri d'avance!

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Points : 658
    Points
    658
    Par défaut
    La propriété generalParameters n est pas accessible.
    il faut soit :
    - ajouter des get/set pour le parametre (conseillé)
    - mettre le parametre en public
    Un petit si la réponse convient. Merci.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 174
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par RapotOR Voir le message
    La propriété generalParameters n est pas accessible.
    il faut soit :
    - ajouter des get/set pour le parametre (conseillé)
    - mettre le parametre en public
    Merci du conseil.

    du coup je vais devoir modifier la table Culture vu qu'elle n'a pas de colonne generalParameters, parce qu'il ne me semble pas très logique d'avoir un setter sur une propriété qui n'existe pas dans la table en question... d'ailleurs même le AddGeneralParameters() me semble étrange... La génération des entités sous doctrine est très touchy, il faut tout revérifier apparemment...

Discussions similaires

  1. [Tomcat]persistence de session Tomcat
    Par coilolo dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 22/06/2004, 09h47
  2. [Persistance] Conseil cette couche ?
    Par Alec6 dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 16/06/2004, 11h21
  3. Processus persistant
    Par LeChip dans le forum Linux
    Réponses: 6
    Dernier message: 18/05/2004, 17h13
  4. [PaintBox] Persistance du dessin non créé dans onPaint
    Par princesse dans le forum C++Builder
    Réponses: 10
    Dernier message: 21/04/2004, 17h47
  5. [Persistence][Framework]Avis.
    Par quilo dans le forum Persistance des données
    Réponses: 5
    Dernier message: 10/09/2003, 14h55

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