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

Laravel PHP Discussion :

insérer données dans deux tables avec un seul formulaire. error Integrity constraint violation: 1452


Sujet :

Laravel PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 9
    Points
    9
    Par défaut insérer données dans deux tables avec un seul formulaire. error Integrity constraint violation: 1452
    Bonjour,

    Alors je voudrais savoir comment faire pour insérer des données dans deux table différentes mais lier, Table Poste(offre, annonce) et entreprise, chaque annonce est lier à une entreprise, j'ai crée deux Model et 1 seul Controller, Poste et Entreprise et PosteController.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Schema::create('entreprises', function (Blueprint $table) {
                $table->bigIncrements('id');
                $table->string('nomEntreprise');
                $table->string('adresseEntreprise');
                $table->timestamps();
            });
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Schema::create('postes', function (Blueprint $table) {
                $table->increments('idPoste');
                $table->unsignedBigInteger('idEntreprise');
                $table->string('nomPoste');
                $table->text('descriptionPoste');
                $table->timestamps();
                $table->foreign('idEntreprise')
                    ->references('id')
                    ->on('entreprises')
                    ->onDelete('cascade');
     
            });
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public function create()
        {
            $postes = Poste::all();
            $entreprises = Entreprise::all();
            return view('postes.create', compact('postes','entreprises'));
        }
    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
     
    public function store(Request $request)
        {
            $data = $request->validate([
                'nomPoste'=>'required|min:3',
                'descriptionPoste'=>'required|min:3'
            ]);
            $data2 = $request->validate([
                'nomEntreprise'=>'required|min:3',
                'adresseEntreprise'=>'required|min:3'
            ]);
            Poste::create($data);
            Entreprise::create($data2);
     
     
     
            return back();
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class Poste extends Model
    {
     
     
        protected $fillable = ['nomPoste','descriptionPoste','idEntreprise'];
     
        public function entreprise()
        {
            return $this->belongsTo(Entreprise::class,'idEntreprise');
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    protected $fillable = ['nomEntreprise', 'adresseEntreprise'];
     
        public function poste()
        {
            return $this->hasMany(Poste::class);
        }
    quand j'insére des données par les factory ça marche super bien car j'arrive a afficher un Poste avec son entreprise. mais dés l'insertion par formulaire j'ai une erreur comme : Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (projetetudiant.postes, CONSTRAINT postes_identreprise_foreign FOREIGN KEY (idEntreprise) REFERENCES entreprises (id) ON DELETE CASCADE).

    Voilà j'ai commencer laravel il y'a 2 jours, je sais pas comment résoudre ce problème et je suis rester bloquer dessus trop longtemps donc , aidez-moi svp !

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Bonjour,

    J'ai un peu de mal à comprendre ce que vous faites.
    Si je lis bien, une poste doit être liè à une entreprise?

    hors ici :
    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
     
    public function store(Request $request)
        {
            $data = $request->validate([
                'nomPoste'=>'required|min:3',
                'descriptionPoste'=>'required|min:3'
            ]);
            $data2 = $request->validate([
                'nomEntreprise'=>'required|min:3',
                'adresseEntreprise'=>'required|min:3'
            ]);
            Poste::create($data);
            Entreprise::create($data2);
     
     
     
            return back();
        }
    Vous créer un poste et puis une entreprise, ce n'est pas l'inverse n d'abords une entreprise et puis un poste et insrére l'id de l'entreprise nouvellement créer dans le poste.
    Un truc du genre mais sans garantie d'avoir compris ce que vous voulez faire :

    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
     
     
    public function store(Request $request)
        {
            $data = $request->validate([
                'nomPoste'=>'required|min:3',
                'descriptionPoste'=>'required|min:3'
            ]);
            $data2 = $request->validate([
                'nomEntreprise'=>'required|min:3',
                'adresseEntreprise'=>'required|min:3'
            ]);
    //On crée l'entrepsise
            $entreprise = Entreprise::create($data2);
    //ob récupère l'id de l'entrepsise et on le met dans le jeux de données de poste
            $data->idEntreprise = $entreprise->id;
     
            Poste::create($data);
     
     
     
     
            return back();
        }

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 9
    Points
    9
    Par défaut
    bonjour, oui c'est ça merci bk. je ne savais pas comment récupère l'id lors de l'insertion dans les deux table Poste et Entreprise. mais c'est bon ça marche merci.(vraiment simple sur laravel)

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

Discussions similaires

  1. [MySQL] Insérer des données dans deux tables à partir d'un formulaire en MVC
    Par lesavant dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 01/07/2016, 15h46
  2. [AC-2007] Ecrire dans deux tables avec un seul Formulaire !
    Par rolnig04 dans le forum Modélisation
    Réponses: 2
    Dernier message: 22/03/2012, 12h33
  3. insérer des données dans deux tables liées
    Par joprog dans le forum Requêtes
    Réponses: 1
    Dernier message: 06/12/2010, 18h24
  4. [MySQL] Insérer des données dans une table avec Foreach
    Par Gogad dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 07/04/2010, 08h53
  5. Réponses: 1
    Dernier message: 20/02/2008, 11h34

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