簡體   English   中英

Laravel 不能添加外鍵約束

[英]Laravel cannot add foreign key constraint

當我嘗試在帶有遷移的 laravel 5 中設置外鍵約束時,我收到錯誤:

[Illuminate\\Database\\QueryException] SQLSTATE[HY000]:一般錯誤:1215 無法添加外鍵約束(SQL:alter table rittenregistratie add co nstraint rittenregistratie_karakterrit_id_foreign 外鍵( karakterrit_id )引用karakterritkarakterrit id )上的karakterritkarakterrit id )刪除級聯[PDO] karakterrit_idkarakterrit HY000]:一般錯誤:1215 無法添加外鍵約束 D:\\wamp\\www>

但我現在知道為什么了??? 遷移的順序是正確的,為什么我會收到這個錯誤? 表 rittenregistratie 有一個名為 karakterrit_id 的外鍵,這是表 karakterrit 中的主鍵。

這是我的遷移 rittenregistratie:

 public function up()
    {
        Schema::create('rittenregistratie', function (Blueprint $table) 
        {
            $table->increments('id');
            $table->integer('user_id')->unsigned();
            $table->timestamps('datum');
            $table->integer('beginstand');
            $table->integer('eindstand');
            $table->text('van');
            $table->text('naar');
            $table->text('bezoekadres');
            $table->text('geredenroute');
            $table->integer('karakterrit_id')->default(1);
            $table->text('toelichting');
            $table->integer('kilometerszakelijk');
            $table->integer('kilomteresprive'); 

            $table->foreign('user_id')
                        ->references('id')
                        ->on('users')
                        ->onDelete('cascade');

            $table->foreign('karakterrit_id')
                        ->references('id')
                        ->on('karakterrit')
                        ->onDelete('cascade');    
        });
    }

添加

$table->integer('karakterrit_id')->unsigned()->default(1);

您是否創建了您在查詢中使用的users表和karakterrit 如果您有兩個表,請檢查它們都應該在引用它們的其他表之前創建的遷移文件的創建日期。

另一個問題可能是不支持的MyISAM 而是使用 InnoDB

DB::statement('ALTER TABLE categories ENGINE = InnoDB');

在大多數情況下,引用的列必須是主鍵或具有我的發現中的唯一鍵

甚至 Laravel 8 的一個常見問題是,在其上設置 foreign_id 的表是較早創建的。 因此,當遷移運行時,它們按順序運行並且找不到外部 ID 引用的表。 如果您看到這恰好將第二個表的名稱更改為較早的日期並且您已排序。

所以說將 2020_12_04_081855_create_developers_table.php 重命名為 2020_12_03_081855_create_developers_table.php。

那會照顧它。 記住日期應該早於第一個表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM