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 :

UniqueConstraint sur 2 champs et UniqueEntity [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre éprouvé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2010
    Messages : 141
    Par défaut UniqueConstraint sur 2 champs et UniqueEntity
    Bonjour,

    Ne trouvant pas de réponses à mon souci après de nombreuses recherches infructueuses, je poste cela ici dans l'espoir que quelqu'un puisse m'éclairer.

    J'ai une entité Entreprise contenant une propriété SIREN et NIC, ces deux propriétés formant un code SIRET unique.
    J'ai donc défini une contrainte Unique au début de mon entité ainsi qu'un UniqueEntity afin d'avoir un message de retour dans un formulaire dès la tentative d'un ajout avec code SIRET déjà en base.

    Cependant, je n'obtiens pas ce message et j'obtiens juste un message d'erreur Symfony de type :
    SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '339057986-00012' for key 'SIRET'

    Voici mon entité, tout me semble pourtant correct non? A moins que j'en fasse une mauvaise utilisation...

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    <?php
     
    namespace Proetco\FrontBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
    use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
    use Symfony\Component\Validator\Constraints as Assert;
     
    /**
     * Proetco\FrontBundle\Entity\Entreprise
     *
     * @ORM\Table(name="entreprise", uniqueConstraints={@ORM\UniqueConstraint(name="SIRET", columns={"SIREN", "NIC"})}) 
     * @ORM\Entity(repositoryClass="Proetco\FrontBundle\Entity\EntrepriseRepository")
     * @UniqueEntity(fields={"SIREN","NIC"}, message="Cette entreprise est déjà enregistrée")
     */
    class Entreprise
    {
        protected $Siret;
        /**
         * @var integer $id
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
     
        /**
         * @var string $SIREN
         *
         * @ORM\Column(name="SIREN", type="string", length=9)
         */
        private $SIREN;
     
        /**
         * @var string $NIC
         *
         * @ORM\Column(name="NIC", type="string", length=5)
         */
        private $NIC;
     
        /**
         * @var string $RS
         *
         * @ORM\Column(name="RS", type="string", length=45, nullable=true)
         */
        private $RS;
     
        /**
         * @var string $NCOM
         *
         * @ORM\Column(name="NCOM", type="string", length=45, nullable=true)
         */
        private $NCOM;
     
        /**
         * @var string $CPOS
         *
         * @ORM\Column(name="CPOS", type="string", length=5, nullable=true)
         */
        private $CPOS;
     
        /**
         * @var string $LCOM
         *
         * @ORM\Column(name="LCOM", type="string", length=45, nullable=true)
         */
        private $LCOM;
     
        /**
         * @var string $INSEE
         *
         * @ORM\Column(name="INSEE", type="string", length=5, nullable=true, nullable=true)
         */
        private $INSEE;
     
        /**
         * @var string $DEP
         *
         * @ORM\Column(name="DEP", type="string", length=2)
         */
        private $DEP;
     
        /**
         * @var string $ARR
         *
         * @ORM\Column(name="ARR", type="string", length=1, nullable=true)
         */
        private $ARR;
     
        /**
         * @var string $CAN
         *
         * @ORM\Column(name="CAN", type="string", length=2, nullable=true)
         */
        private $CAN;
     
     
        public function getSiret()
        {
            return $this->Siret;
        }
        public function setSiret($Siret)
        {
            $this->Siret = $Siret;
        }
     
     
        /**
         * Get id
         *
         * @return integer 
         */
        public function getId()
        {
            return $this->id;
        }
     
        /**
         * Set SIREN
         *
         * @param string $sIREN
         */
        public function setSIREN($sIREN)
        {
            $this->SIREN = $sIREN;
        }
     
        /**
         * Get SIREN
         *
         * @return string 
         */
        public function getSIREN()
        {
            return $this->SIREN;
        }
     
        /**
         * Set NIC
         *
         * @param string $nIC
         */
        public function setNIC($nIC)
        {
            $this->NIC = $nIC;
        }
     
        /**
         * Get NIC
         *
         * @return string 
         */
        public function getNIC()
        {
            return $this->NIC;
        }
     
        /**
         * Set RS
         *
         * @param string $rS
         */
        public function setRS($rS)
        {
            $this->RS = $rS;
        }
     
        /**
         * Get RS
         *
         * @return string 
         */
        public function getRS()
        {
            return $this->RS;
        }
     
        /**
         * Set NCOM
         *
         * @param string $nCOM
         */
        public function setNCOM($nCOM)
        {
            $this->NCOM = $nCOM;
        }
     
        /**
         * Get NCOM
         *
         * @return string 
         */
        public function getNCOM()
        {
            return $this->NCOM;
        }
     
        /**
         * Set CPOS
         *
         * @param string $cPOS
         */
        public function setCPOS($cPOS)
        {
            $this->CPOS = $cPOS;
        }
     
        /**
         * Get CPOS
         *
         * @return string 
         */
        public function getCPOS()
        {
            return $this->CPOS;
        }
     
        /**
         * Set LCOM
         *
         * @param string $lCOM
         */
        public function setLCOM($lCOM)
        {
            $this->LCOM = $lCOM;
        }
     
        /**
         * Get LCOM
         *
         * @return string 
         */
        public function getLCOM()
        {
            return $this->LCOM;
        }
     
        /**
         * Set INSEE
         *
         * @param string $iNSEE
         */
        public function setINSEE($iNSEE)
        {
            $this->INSEE = $iNSEE;
        }
     
        /**
         * Get INSEE
         *
         * @return string 
         */
        public function getINSEE()
        {
            return $this->INSEE;
        }
     
        /**
         * Set DEP
         *
         * @param string $dEP
         */
        public function setDEP($dEP)
        {
            if (!isset($this->DEP))$this->DEP = '02';
            $this->DEP = $dEP;
        }
     
        /**
         * Get DEP
         *
         * @return string 
         */
        public function getDEP()
        {
            if (!isset($this->DEP))$this->DEP = '02';
            return $this->DEP;
        }
     
        /**
         * Set ARR
         *
         * @param string $aRR
         */
        public function setARR($aRR)
        {
            $this->ARR = $aRR;
        }
     
        /**
         * Get ARR
         *
         * @return string 
         */
        public function getARR()
        {
            return $this->ARR;
        }
     
        /**
         * Set CAN
         *
         * @param string $cAN
         */
        public function setCAN($cAN)
        {
            $this->CAN = $cAN;
        }
     
        /**
         * Get CAN
         *
         * @return string 
         */
        public function getCAN()
        {
            return $this->CAN;
        }
     
        public function retrieveSiren($siret){
            return substr($siret,0,9);
        }
     
        public function retrieveNic($siret){
            return substr($siret,-5,5);
        }
     
        //contraintes de validation
        //TODO : valider les champs avec Regex
     
        public function isSIREN(){
     
        }
     
        public function isNIC(){
     
        }
     
     
    }
    Merci d'avance pour votre aide.

  2. #2
    Membre Expert
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 419
    Par défaut
    D'un point de vue technique, la solution m'intéresse également.

    D'un point de vue pratique, as tu besoin de rassembler les siren à un moment ? de faire des tri ou je ne sais quoi juste sur le siren (par exemple, avoir tous les siret XXXXX).

    Dans le cas contraire, tu pourrais stocker un numéro de siret unique dans la BDD, et ajouter 2 getter en plus de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function getSiren(){
     return substr ( $this->getSiret() , 0 , 10 );
    }
    function getNIC(){
     return substr ( $this->getSiret() , 10 , 5 );
    }
    je crois que rien ne force les données de ton entité à être toutes présente en BDD.

    Pierre

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    bonjour,

    peux-tu donner le code de ton formulaire et de l'action de ton controller

  4. #4
    Membre éprouvé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2010
    Messages : 141
    Par défaut
    Citation Envoyé par pmithrandir Voir le message
    D'un point de vue pratique, as tu besoin de rassembler les siren à un moment ? de faire des tri ou je ne sais quoi juste sur le siren (par exemple, avoir tous les siret XXXXX).

    je crois que rien ne force les données de ton entité à être toutes présente en BDD.
    En effet, rien ne force des données d'entité à être mappées dans Doctrine et ta solution est peut-être celle que j'aurai choisie. Seulement, je reprends un projet avec la base qui en découle et c'est ainsi que je dois faire.

    Voici donc le contrôleur et le formulaire :

    Contrôleur:
    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
    public function inscriptionAction()
        {
            //création formulaire
            $inscription = new Utilisateur_Entreprise;
            $form = $this->createForm(new InscriptionType, $inscription);
            //création gestionnaire de formulaire
            $formHandler = new InscriptionHandler($form, $this->get('request'), $this->getDoctrine()->getEntityManager());
     
            //traitement formulaire
            if ($formHandler->process())
            {
                $this->get('session')->setFlash('success','Votre inscription a bien été prise en compte');
                return $this->redirect('inscription');
            }
     
            return $this->render('ProetcoUserBundle:Default:inscription.html.twig', array('form' => $form->createView()));
        }
    Le formulaire :
    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
    <?php
     
    namespace Proetco\UserBundle\Form\Type;
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilder;
    use Proetco\FrontBundle\Form\Type\EntrepriseType;
     
    class InscriptionType extends AbstractType
    {
     
        public function buildForm(FormBuilder $builder, array $options)
        {
            $builder
                    ->add('utilisateur', new UtilisateurType())
                    ->add('entreprise', new EntrepriseType())
            ;
     
        }
     
        public function getDefaultOptions(array $options)
        {
            return array('data_class' => 'Proetco\FrontBundle\Entity\Utilisateur_Entreprise');
        }
     
        public function getName()
        {
            return 'inscription';
        }
     
    }

  5. #5
    Membre éprouvé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2010
    Messages : 141
    Par défaut
    Et le builder EntrepriseType du coup :
    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
    public function buildForm(FormBuilder $builder, array $options)
        {
            $builder
                    ->add('Siret', null, array('max_length' => 14))
                    ->add('SIREN')
                    ->add('NIC')
                    ->add('RS')
                    ->add('NCOM')
                    ->add('CPOS')
                    ->add('LCOM')
                    ->add('INSEE')
                    ->add('DEP')
                    ->add('ARR')
                    ->add('CAN')
            ;
        }
    Serait-ce dû au fait que le champs Siret que j'ajoute au formulaire n'est pas mappé?

  6. #6
    Membre Expert
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 419
    Par défaut
    Un petit script SQL pour la migration et les bons getter et setter, et ton programme devrait fonctionner pareil en fait. C'est la beauté des entités, séparer les contraintes et le type de stockage de la logique métier.

    Je dirais 3-4 heures de boulot pour refaire la classe et le script avec quelques tests du résultat.

    mais si tu trouve la contrainte unique, c'est encore mieux bien sur, plus facile a comprendre, plus robuste je pense... et plus flexible.

    Pierre

  7. #7
    Membre éprouvé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2010
    Messages : 141
    Par défaut
    Cela ne me prendrait même pas tout ce temps à vrai dire, vu que la base ne contient que des fixtures pour le moment...

    Mais je souhaite faire cela ainsi, et j'avoue que cherchant la solution à ce problème depuis un moment maintenant, j'aimerai bien savoir d'où cela provient...

  8. #8
    Membre Expert
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 419
    Par défaut
    j ai trouvé ca dans la doc doctrine :
    http://docs.doctrine-project.org/pro...iqueconstraint


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    /**
     * @Entity
     * @Table(name="ecommerce_products",uniqueConstraints={@UniqueConstraint(name="search_idx", columns={"name", "email"})})
     */
    class ECommerceProduct
    ....
    As tu essayé ?
    Pierre

  9. #9
    Membre éprouvé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2010
    Messages : 141
    Par défaut
    La contrainte unique est bien prise en compte puisque je peux la voir en base. En fait, c'est plus l'UniqueEntity qui pose souci à mon avis. Donc certainement une mauvaise prise en compte dans mon formulaire non?

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    la validation est apparemment appelé sur un objet "Utilisateur_Entreprise" ayant un attribut "entreprise" donc cela fait t'il parti des contraintes de Utilisateur_Entreprise de valider son attribut "entreprise" ?
    il y a une contrainte "valid" pour valider les attributs d'un objet
    cf https://github.com/symfony/symfony-d...ints/Valid.rst

    Quelques autre pistes en vrac
    • tu as bien l'option data_class dans le formulaire EntrepriseType?
    • pourquoi les attributs de tes entités sont en minuscules et les champs de ton form en Majuscules ?
    • que fait la méthode process ? peut-t'on voir son code ?
    • As tu essayé de valider ton entité sans passer par le formulaire en faisant
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      $errors=$this->get('validator')->validate($entreprise);echo 'il y a '.count(errors);

  11. #11
    Membre Expert
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 419
    Par défaut
    Bonjour,

    si c'est pour le validator, j'ai un lein, mais vers la version mongodb de doctrine validator..

    http://stackoverflow.com/questions/9...dm-in-symfony2

    Est ce qu'un équivalent existe dans la vesrion mysql ? aucune idée.

  12. #12
    Membre éprouvé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2010
    Messages : 141
    Par défaut
    Citation Envoyé par arnooo999 Voir le message
    la validation est apparemment appelé sur un objet "Utilisateur_Entreprise" ayant un attribut "entreprise" donc cela fait t'il parti des contraintes de Utilisateur_Entreprise de valider son attribut "entreprise" ?
    il y a une contrainte "valid" pour valider les attributs d'un objet
    cf https://github.com/symfony/symfony-d...ints/Valid.rst

    Quelques autre pistes en vrac
    • tu as bien l'option data_class dans le formulaire EntrepriseType?
    • pourquoi les attributs de tes entités sont en minuscules et les champs de ton form en Majuscules ?
    • que fait la méthode process ? peut-t'on voir son code ?
    • As tu essayé de valider ton entité sans passer par le formulaire en faisant
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      $errors=$this->get('validator')->validate($entreprise);echo 'il y a '.count(errors);
    Mon entité est correctement validée ainsi.

    J'ai bien l'option data_class dans mon formulaire EntrepriseType.
    La casse des attributs a été modifiée depuis le temps, j'avais juste repris une base avec des noms de champs en majuscule.
    La méthode process enregistre en base après un premier flush, l'entité utilisateur et celle entreprise, et dans un second, la liaison utilisateur_entreprise les id nécessaires des deux entités n'étant pas encore enregistrés avant cela. Si d'ailleurs il est possible de réaliser les deux flush en un seul, je suis preneur.
    Je réalisais un traitement sur les données avant cela toujours dans cette fonction, seulement ce traitement (extraction des codes Siren et Nic à partir de la valeur du champs SIRET) n'était du coup pas soumis à la validation.

    J'ai donc compris où se situe mon erreur, je vérifie un formulaire quasi vide en ce qui concerne mon entité entreprise puisque les champs Siret et Nic sont créés à partir d'un champs Siret présent dans mon formulaire (le seul concernant l'entreprise), du coup il me faudra attribuer des valeurs au formulaire avant de passer la validation isValid().

    Est-ce bien cela? Il faudra apparemment utiliser la fonction bind non?

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    je vérifie un formulaire quasi vide en ce qui concerne mon entité entreprise puisque les champs Siret et Nic sont créés à partir d'un champs Siret présent dans mon formulaire (le seul concernant l'entreprise), du coup il me faudra attribuer des valeurs au formulaire avant de passer la validation isValid().
    C'est en contradiction avec le code du formulaire que tu as donné
    public function buildForm(FormBuilder $builder, array $options)
    {
    $builder
    ->add('Siret', null, array('max_length' => 14))
    ->add('SIREN')
    ->add('NIC')
    ->add('RS')
    ->add('NCOM')
    ->add('CPOS')
    ->add('LCOM')
    ->add('INSEE')
    ->add('DEP')
    ->add('ARR')
    ->add('CAN')
    ;
    }
    Donc si je comprend bien il n'y a qu'un champ "Siret" dans le formulaire entreprise.
    le plus simple serait de redéfinir le setter de Siret
    public function setSiret($Siret){
    $this->SIREN=substr($siret,0,9);
    $this->NIC=substr($siret,-5,5);
    }
    public function getSiret($Siret){
    return $this->SIREN.$this->NIC;
    }
    Si ça ne fonctionne toujours pas fait un test sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $errors=$this->get('validator')->validate($utilisateur_entreprise);echo 'il y a '.count(errors).' dans l\'entité Utilisateur_Entreprise';
    afin de savoir si la validation de l'entité Utilisateur_Entreprise appel bien la validation de son attribut Entreprise.

    Si d'ailleurs il est possible de réaliser les deux flush en un seul, je suis preneur.
    Essaie en configurant des cascade persist sur les relations User et Entreprise de l'entité Utilisateur_Entreprise, (dans ce cas on appel le persist uniquement sur Utilisateur_Entreprise).
    http://docs.doctrine-project.org/pro...ade-operations

  14. #14
    Membre éprouvé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2010
    Messages : 141
    Par défaut
    Citation Envoyé par arnooo999 Voir le message
    C'est en contradiction avec le code du formulaire que tu as donné


    Donc si je comprend bien il n'y a qu'un champ "Siret" dans le formulaire entreprise.
    le plus simple serait de redéfinir le setter de Siret


    Si ça ne fonctionne toujours pas fait un test sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $errors=$this->get('validator')->validate($utilisateur_entreprise);echo 'il y a '.count(errors).' dans l\'entité Utilisateur_Entreprise';
    afin de savoir si la validation de l'entité Utilisateur_Entreprise appel bien la validation de son attribut Entreprise.


    Essaie en configurant des cascade persist sur les relations User et Entreprise de l'entité Utilisateur_Entreprise, (dans ce cas on appel le persist uniquement sur Utilisateur_Entreprise).
    http://docs.doctrine-project.org/pro...ade-operations

    En recréant un builder avec juste le champs SIRET nécessaire, cela fonctionne. Il me suffisait de ne pas tenir absolument à modifier le formulaire créé de base.
    Je cherchais à faire très compliqué pour quelque-chose de très simple, ça m'a permis de mieux comprendre les formulaires en tout cas.

    Je vais creuser sur ce système de Cascade persist.

    Merci beaucoup pour ton aide.

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

Discussions similaires

  1. Recherche d'un mot avec LIKE sur plusieurs champs
    Par reynhart dans le forum Langage SQL
    Réponses: 16
    Dernier message: 26/11/2004, 17h41
  2. [CR] Groupement dynamique sur plusieurs champs paramètrés
    Par CDRIK dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 07/06/2004, 17h55
  3. recuperer les id sur plusieurs champs
    Par matN59 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/03/2004, 10h23
  4. [CR] Problème de sélection sur un champ date
    Par noluc dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/11/2003, 16h56
  5. [VB6] Zone de liste modifiable basée sur un champ
    Par pepper dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 27/11/2002, 13h41

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