

**users テーブル**  
<https://gyazo.com/831e6d98dfc12e266db09b3a0db6bd11>

**lectures テーブル**  
<https://gyazo.com/c2626070a76bc14e555d89c7c3d7dfdf>

上記2つのテーブルがあり、  
lecturesの「user_id」カラムと users の「id」カラムとを紐付けたいので、  
このようにしました。

**add_foreign_to_lectures_table.php**

[code]

    <?php
    
    use Illuminate\Support\Facades\Schema;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Database\Migrations\Migration;
    
    class AddForeignToLecturesTable extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::table('lectures', function (Blueprint $table) {
                $table->foreign('user_id')->references('id')->on('users');
            });
        }    /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::table('lectures', function (Blueprint $table) {
                $table->dropForeign('lectures_user_id_foreign');
            });
        }
    }
    
[/code]

しかし、このようなエラーが返ってきてしまいました。

>
[code]

>     SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or
> update a child row: a foreign key constraint fails (`bbl`.`#sql-51e8_25`,
> CONSTRAINT `lectures_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES
> `users` (`id`)) (SQL: alter table `lectures` add constraint
> `lectures_user_id_foreign` foreign key (`user_id`)  
>        references `users` (`id`))
>  
[/code]

<https://gyazo.com/bf3045cf3582c6084526b01719cdd6ce>

これについて、解決策を教えていただければ幸いですm(_ _)m


CC BY-SA 4.0
2020-05-01T02:16:33.850
66169
2022-08-07T16:05:25.527
2020-05-01T03:24:02.947
2376
39919
question
php laravel
Laravelで、外部キー制約の処理で SQLSTATE[23000] エラーが出て、マイグレートできません。


今回の原因は  
「users.idに存在しないデータがlectures.user_idに存在している」からです。

対処法としては  
「lectures.user_idに存在しているusers.idに存在しないデータ」を削除するか置き換えないといけません。

外部キー制約は  
「参照元フィールドに存在するデータのみ参照先フィールドのデータに存在できる」  
という仕様です。

今回の場合は  
「users.idに存在するデータのみlectures.user_idに存在できる」  
という形になります。  
ただしそもそも  
「users.idに存在しないデータがlectures.user_idに存在している」  
場合その外部キーを設定することすらできません。  
今回のエラーもそのようなメッセージです。

じゃあどのようなデータが存在しているかは実際データをみて調査してみてください。  
またどのような対応を取るかもシステムの仕様に依存するので対処の方法も変わります。

  * 整合性が取れないデータをdeleteするか
  * usersにデータを追加する
  * lectures.user_idにnullを代入する

のいずれかになると思います

ちなみに  
コメントのデータの中身を見るとlectures.user_idに0が存在するものがありそうですね。  
lectures.user_idが必須条件でない場合は0ではなくてNULLを入れるか疑似データとしてusers.idが0のデータを必要があります。


CC BY-SA 4.0
2020-05-08T02:21:10.057
66409
2020-05-08T02:21:10.057
22665
66169
answer


なんとかなります。過去ログに似たようなエラーとその答えが書いていました。


CC BY-SA 4.0
2020-05-08T03:06:26.977
66412
2020-05-08T03:06:26.977
28358
66169
answer