1. ホーム
  2. ララベル

[解決済み】マイグレーション。外部キー制約を追加できない

2022-04-03 17:04:27

質問

Laravelで外部キーを作成しようとしているのですが、テーブルをマイグレートする際に artisan 次のようなエラーが発生します。

[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL
: alter table `priorities` add constraint priorities_user_id_foreign foreign 
key (`user_id`) references `users` (`id`))     

私のマイグレーションコードは以下の通りです。

優先マイグレーションファイル

public function up()
{
    //
    Schema::create('priorities', function($table) {
        $table->increments('id', true);
        $table->integer('user_id');
        $table->foreign('user_id')->references('id')->on('users');
        $table->string('priority_name');
        $table->smallInteger('rank');
        $table->text('class');
        $table->timestamps('timecreated');
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    //
    Schema::drop('priorities');
}

ユーザー移行ファイル

public function up()
{
    //
    Schema::table('users', function($table)
    {
    $table->create();
    $table->increments('id');
    $table->string('email');
    $table->string('first_name');
    $table->string('password');
    $table->string('email_code');
    $table->string('time_created');
    $table->string('ip');
    $table->string('confirmed');
    $table->string('user_role');
    $table->string('salt');
    $table->string('last_login');

    $table->timestamps();
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    //
        Schemea::drop('users');
}

ユーザー、クライアント、プロジェクト、タスク、ステータス、優先度、タイプ、チームなど、作成する必要のあるテーブルがたくさんあるので、今すぐこれを取得したいのですが、何が間違っていたのか、何かアイデアはありますか?理想的には、これらのデータを保持するテーブルを外部キーで作成したいのです。 clients_projectproject_tasks などです。

誰かが私を助けることができることを願っています。

どのように解決するのですか?

2ステップで追加し、符号なしにもすると良い。

public function up()
{
    Schema::create('priorities', function($table) {
        $table->increments('id', true);
        $table->integer('user_id')->unsigned();
        $table->string('priority_name');
        $table->smallInteger('rank');
        $table->text('class');
        $table->timestamps('timecreated');
    });

   Schema::table('priorities', function($table) {
       $table->foreign('user_id')->references('id')->on('users');
   });

}