Laravel 5.8 にて["SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint"]エラー

# Laravel 5.8 にて Cannot add foreign key constraint が出たときの対応


さきに答え書くと、

#### 型が`bigIncrements`or`bigInteger`で一致してるか確認してみて〜
Laravel 5.8だと`php artisan make:migration 〜`で生成したテーブル定義では、
テーブルのメインidの型は`bigIncrements`になってる。


## 経緯
わーいLaravel 5.8 つかってみよ〜としたら、`php artisan migrate`で早速つまづいた。
以下のようなテーブル定義でmigrate実行したらエラー。



```php

//質問テーブル
    public function up()
    {
        Schema::create('questions', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('title');
            $table->string('slug');
            $table->string('body');

            $table->integer('category_id')->unsigned();
            $table->integer('user_id')->unsigned();
            $table->timestamps();
        });
    }

//返答テーブル
    public function up()
    {
        Schema::create('replies', function (Blueprint $table) {
            $table->bigIncrements('id');

            $table->text('body');
            $table->integer('question_id')->unsigned();
            //外部キー制約
            $table->foreign('question_id')->references('id')
                ->on('questions')->onDelete('cascade');
            $table->integer('user_id');
            $table->timestamps();
        });

//エラー
   Illuminate\Database\QueryException  : SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `replies` add constraint `replies_question_id_foreign` foreign key (`question_id`) references `questions` (`id`) on delete cascade)

  at /var/www/bitfumes/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664
    660|         // If an exception occurs when attempting to run a query, we'll format the error
    661|         // message to include the bindings with SQL, which will make this exception a
    662|         // lot more helpful to the developer instead of just the database's errors.
    663|         catch (Exception $e) {
  > 664|             throw new QueryException(
    665|                 $query, $this->prepareBindings($bindings), $e
    666|             );
    667|         }
    668| 

  Exception trace:

  1   PDOException::("SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint")
      /var/www/bitfumes/vendor/laravel/framework/src/Illuminate/Database/Connection.php:458

  2   PDOStatement::execute()
      /var/www/bitfumes/vendor/laravel/framework/src/Illuminate/Database/Connection.php:458

  Please use the argument -v to see more details.

```

## 対応

んじゃぐぐってみっか。
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint でぐぐると、先人たちが 

- テーブルの生成順序がおかしいのでは？外部キーを参照するテーブルが存在してないのでは？
- 制約キーのっけるカラムと、制約キーとして参照するカラムの型が一致してないのでは?

といった事例あり。たしかに確認してみると、自分の場合は

```php 
//questions 
$table->bigIncrements('id');
```
```php 
//replies
$table->integer('question_id')->unsigned();
            //外部キー制約
            $table->foreign('question_id')->references('id')
                ->on('questions')->onDelete('cascade');
```
で型ずれてる。。。
ということで、以下なおしたらエラー解消されました◎

```php 
//replies
$table->bigInteger('question_id')->unsigned();
        ^^^^^^^^^^^
            //外部キー制約
            $table->foreign('question_id')->references('id')
                ->on('questions')->onDelete('cascade');
```
ちなみに、参照する側のテーブルのidを`increments`にしてもOKのようです。
以下参考URLの[Be Careful: Laravel 5.8 Added bigIncrements As Defaults](https://laraveldaily.com/be-careful-laravel-5-8-added-bigincrements-as-defaults/)
には英語ですが、そのように記述が。
公式が変更点として`bigIncrements`or`bigInteger`を取り上げてなかったことに、この記事の方おかんむりでした。

参考URL
[Be Careful: Laravel 5.8 Added bigIncrements As Defaults](https://laraveldaily.com/be-careful-laravel-5-8-added-bigincrements-as-defaults/)
[【メモ】Laravelで外部キー制約付きのテーブルをマイグレーションする時に気をつけた方がよかった点](https://qiita.com/Yorinton/items/3dbf6ad30358bd80fcb0)
[laravel5.7 外部キーエラー　SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint](https://teratail.com/questions/156047)

Added bigIncrements