Partage
  • Partager sur Facebook
  • Partager sur Twitter

Migration: Cannot add foreign key constraint

in laravel

    19 octobre 2018 à 6:36:04

    Bonjour les amis!

    Je suis entrain de travailler sur un projet en laravel mais je fais face à un problème dans la migration de mes tables au niveau de clés étrangères.

    Je reçois le message d'erreur suivant :

    λ php artisan migrate
    Migration table created successfully.
    
    
      [Illuminate\Database\QueryException]
      SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `fees` add constraint `fee
      s_fee_type_id_foreign` foreign key (`fee_type_id`) references `feetypes` (`fee_type_id`))
    
    
    
      [PDOException]
      SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint

    voici mes migrations

    table Feetypes

    <?php
    
    use Illuminate\Support\Facades\Schema;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Database\Migrations\Migration;
    
    class CreateFeetypesTable extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::create('feetypes', function (Blueprint $table) {
                $table->unsignedinteger('fee_type_id');
                $table->string('fee_type', 100);
            });
        }
    
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::dropIfExists('feetypes');
        }
    }

    et pour la table fees

    <?php
    
    use Illuminate\Support\Facades\Schema;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Database\Migrations\Migration;
    
    class CreateFeesTable extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::create('fees', function (Blueprint $table) {
                $table->increments('fee_id');
                $table->integer('academic_id')->unsigned();
                $table->integer('level_id')->unsigned();
                $table->integer('fee_type_id');
                $table->string('fee_heading', 100)->nullable();
                $table->float('amount', 8, 2);
                $table->foreign('academic_id')->references('academic_id')->on('academics');
                $table->foreign('level_id')->references('level_id')->on('levels');
                $table->foreign('fee_type_id')->references('fee_type_id')->on('feetypes');
            });
        }
    
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::dropIfExists('fees');
        }
    }
    


    Pourriez-vous m'aider?


    -
    Edité par henock.barakael 19 octobre 2018 à 6:56:39

    • Partager sur Facebook
    • Partager sur Twitter
      19 octobre 2018 à 9:11:40

      Bonjour,

      Les tables "level" et "academic" sont elles créée ?

      • Partager sur Facebook
      • Partager sur Twitter
        2 septembre 2019 à 10:09:13

        J'ai moi de même ce type d'erreur.

        SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
        

        Sur certains cas j'ai réussi à lever l'erreur en mettant en place les points suivant :

        Table de jonction :

            public function up()
            {
                Schema::create('a_b', function (Blueprint $table) {
                    $table-&gt;engine = 'InnoDB';
                    $table-&gt;increments('id');
                    $table-&gt;integer('a_id')-&gt;unsigned();
                    $table-&gt;integer('b_id')-&gt;unsigned();
                    $table-&gt;foreign('a_id')-&gt;references('id')-&gt;on('a');
                    $table-&gt;foreign('b_id')-&gt;references('id')-&gt;on('b');
                });
            }
        

        Table A

            public function up()
            {
                Schema::create('a', function (Blueprint $table) {
                    $table-&gt;engine = 'InnoDB';
                    $table-&gt;increments('id');
                    $table-&gt;string('code', 10);
                    $table-&gt;string('libelle', 50);
                });
            }
        

        Table B

            public function up()
            {
                Schema::create('b', function (Blueprint $table) {
                    $table-&gt;engine = 'InnoDB';
                    $table-&gt;increments('id');
                    $table-&gt;string('code', 10);
                    $table-&gt;string('libelle', 50);
                });
            }
        

        Les points important ici sont le fait d'imposer le moteur SQL InnoDB :

        $table-&gt;engine = 'InnoDB';
        

        Et de s'assurer que les id soient non-signé :

        $table-&gt;increments('id');
        $table-&gt;integer('a_id')-&gt;unsigned();
        

        -
        Edité par amadeus150 2 septembre 2019 à 10:16:00

        • Partager sur Facebook
        • Partager sur Twitter

        Migration: Cannot add foreign key constraint

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown