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 :

Problème d'insertion avec doctrine [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 194
    Par défaut Problème d'insertion avec doctrine
    Bonjour,

    J'ai un petit souci d'insertion dans une table qui contient une clé étrangère, malgré les différentes solutions trouvés sur le net, j'ai toujours la même erreur.
    Voici le code qui se trouve dans mon controleur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            $em = $this->getDoctrine()->getManager();
            $tb1 = $em->getRepository('AppSecureBundle:Table1')->find($_POST['chCoId']);
            
            $tb2 = new Table2();
            $tb2->setChCoId($tb1->getId()); <- clé étrangère
            $tb2->setChCour($co);
            $tb2->setChActif(1);
            $tb2->setChCode($_POST['chCode']);
            $tb2->setChValeur($_POST['chValeur']);
    
            $em2 = $this->getDoctrine()->getManager();
            $em2->persist($tb2);
            $em2->flush();
    est voici l'erreur qu'il me retourne :

    An exception occurred while executing 'INSERT INTO table2 (ch_id, ch_co_id, ch_actif, ch_cour, ch_code, ch_valeur) VALUES (?, ?, ?, ?, ?, ?)' with params [22, null, "true", "false", "TOTO", "TATA"]:

    SQLSTATE[23502]: Not null violation: 7 ERREUR: une valeur NULL viole la contrainte NOT NULL de la colonne « ch_co_id »
    DETAIL: La ligne en échec contient (22, null, TOTO, TATA, t, f)
    Même avec le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tb2->setChCoId($_POST['chCoId']);
    J'ai la même erreur, si vous avez une petite idée, je suis preneur.

    En vous remerciant par avance

  2. #2
    Membre Expert Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($tb1->getId());

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 194
    Par défaut
    il me renvoi:

    il récupère bien l'id, j'ai testé avec d'autres sélection.

  4. #4
    Membre Expert Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut
    avant le persist

    [EDIT]
    D'autre part ... pourquoi deux EntityManager ?
    Et pourquoi accéder aux données du post de cette manière ?
    Et wtf est-ce que c'est une action qui traite un formulaire ?

    Je retire ce que j'ai dit : oublie les var_dump et lis un peu la doc de Symfony.
    Tu t'encombres avec un framework si c'est pour coder from scratch...

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 194
    Par défaut
    D'autre part ... pourquoi deux EntityManager ? C'est un test que j'avais fait que j'ai retiré depuis
    Et pourquoi accéder aux données du post de cette manière ? c'est la manière la plus rapide que je connait, j'ai vu dans la doc, effectivement un autre méthode
    Et wtf est-ce que c'est une action qui traite un formulaire ? wtf ?

    Tu t'encombres avec un framework si c'est pour coder from scratch... Obligation boulot, qui impose maintenant l'utilisation de se framework.

    Malgré tout les changements, rien a faire , il me force le champ a null.

    même en utilisant la méthode de la doc SF:

    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
     
    use Acme\StoreBundle\Entity\Category;
    use Acme\StoreBundle\Entity\Product;
    use Symfony\Component\HttpFoundation\Response;
     
    class DefaultController extends Controller
    {
        public function createProductAction()
        {
            $category = new Category();
            $category->setName('Main Products');
     
            $product = new Product();
            $product->setName('Foo');
            $product->setPrice(19.99);
            // lie ce produit à une catégorie
            $product->setCategory($category);
     
            $em = $this->getDoctrine()->getManager();
            $em->persist($category);
            $em->persist($product);
            $em->flush();
     
            return new Response(
                'Id du produit créé : '.$product->getId().' et id de la catégorie : '.$category->getId()
            );
        }
    }
    Merci pour le coup de main, car la je sèche vraiment.

  6. #6
    Membre Expert Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut
    Mouais, alors bon : commence par faire un var_dump de ton objet juste avant le persist et regarde si ton attribut est à NULL.

    S'il est NULL : vérifie qu'un de tes autres setters ne vient pas écraser le champs entre temps.
    Si l'objet a bien un attribut rempli juste avant le persist, vérifie que ton attribut est correctement mappé au champs de la table (typo, majuscule etc.)

    ++

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

Discussions similaires

  1. [2.x] [Doctrine 2] Problème d'insertion avec une relation manytomany
    Par Khalezis dans le forum Symfony
    Réponses: 0
    Dernier message: 14/11/2013, 12h56
  2. [MySQL] Problème d'insertion avec apostrophe
    Par cari dans le forum PHP & Base de données
    Réponses: 86
    Dernier message: 11/07/2006, 12h21
  3. Problème d'insertion avec un champ Date/Heure ?
    Par bds2006 dans le forum Bases de données
    Réponses: 1
    Dernier message: 26/06/2006, 10h37
  4. Problème d'INSERT avec caractères accentués: mysql 5.0
    Par yizashi dans le forum Installation
    Réponses: 2
    Dernier message: 05/04/2006, 10h26
  5. Problème d'insertion avec MySQL
    Par Sonny dans le forum ASP
    Réponses: 13
    Dernier message: 28/08/2003, 13h52

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