Search code examples
phpmysqlforeign-keysmigrationlaravel

Laravel Migrations self-referencing foreign key General error: 1005 Can't create table


Why do I have a problem creating a table using Laravel Migrations Schema Builder?

The problem occurs with a table with a self-referencing foreign key.

Schema::create('cb_category', function($table)
{
    $table->integer('id')->primary()->unique()->unsigned();
    $table->integer('domain_id')->unsigned();
    $table->foreign('domain_id')->references('id')->on('cb_domain'); 
    $table->integer('parent_id')->nullable(); 
    $table->foreign('parent_id')->references('id')->on('cb_category')->onUpdate('cascade')->onDelete('cascade'); 
    $table->string('name');
    $table->integer('level');
});

SQLSTATE[HY000]: General error: 1005 Can't create table 'eklik2.#sql-7d4_e' (errno: 150) (SQL: alter table `cb_category` add constraint cb_category_parent_id_foreign foreign key (`parent_id`) references `cb_category` (`id`) on delete cascade on update cascade) (Bindings: array ())

[PDOException]

SQLSTATE[HY000]: General error: 1005 Can't create table 'eklik2.#sql-7d4_e' (errno: 150)


Solution

  • You have to break this into two Schema blocks, one creating the columns, the other adding the FKs. mysql can't do both at the same time.