Eloquent InnoDB无法添加外键(错误1215)

时间:2017-06-26 08:36:31

标签: mysql laravel eloquent innodb

我正在尝试使用具有雄辩的ORM和 InnoDB 引擎创建一个包含外键的表,但它失败并出现错误:

常规错误: 1215无法添加外部索引约束

问题是适用于mariaDB ,我在另一台计算机上试过。

这是表格:

DB::schema()->create('client', function($table){
        $table->engine = 'InnoDB';

        $table->increments('id')
              ->comment('Identifiant du client');

        $table->string('cli_nom', 25)
              ->comment('Nom ou raison sociale du client');

        $table->string('cli_activite', 5)
              ->comment('Code NAF activité');

        $table->text('cli_activite_desc')
              ->comment('Description du code NAF');

        $table->integer('cli_adresse_id')
            ->unsigned()
            ->comment('Id de l adresse du client');

        $table->integer('cli_type')
            ->comment('1:client ou 0:prospect');

        $table->integer('cli_theme_couleur_id')
            ->unsigned()
            ->comment('Id de la couleur de personnalisation d interface');

        $table->integer('cli_theme_id')
            ->unsigned()
            ->comment('Id du theme acheté par le client');

        $table->timestamps();

        $table->foreign('cli_adresse_id')
              ->references('id')->on('adresse')
              ->onDelete('restrict');

        $table->foreign('cli_theme_couleur_id')
            ->references('id')->on('theme_couleur')
            ->onDelete('restrict');

        $table->foreign('cli_theme_id')
            ->references('id')->on('theme')
            ->onDelete('restrict');
    });

我还尝试将index()添加到fk:

            $table->integer('cli_adresse_id')
            ->unsigned()
            ->index()
            ->comment('Id de l adresse du client');

修改

这是引用的表格:

 DB::schema()->create('adresse', function($table){
        $table->increments('id')
            ->unsigned()
            ->comment('Identifiant de l adresse');

        $table->integer('adr_num')
              ->comment('Numéro de rue');

        $table->string('adr_voie', 250)
              ->comment('Rue ou voie dans la ville');

        $table->string('adr_cp', 10)
              ->comment('Code postal de l adresse');

        $table->string('adr_ville', 250)
              ->comment('Nom de la ville de l adresse');

        $table->integer('adr_pays')
              ->comment('Identifiant du pays');

        $table->timestamps();
    });

0 个答案:

没有答案