Laravel迁移自我引用外键问题

gan*_*404 10 php mysql migration foreign-keys laravel

您好我有一个问题,使用迁移架构生成器创建一个表.使用自引用外键的表发生此问题.这是产生错误的代码:

        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');
    });
Run Code Online (Sandbox Code Playgroud)

这是错误:

  SQLSTATE[HY000]: General error: 1005 Can't create table 'eklik2.#sql-7d4_e' (errno: 150) (SQL: alter table `cb_cate
Run Code Online (Sandbox Code Playgroud)

血污add constraint cb_category_parent_id_foreign foreign key (PARENT_ID ) referencescb_category (上更新级联id`)上德尔ETE级联)(绑定:阵列())

[PDOException] SQLSTATE [HY000]:常规错误:1005无法创建表'eklik2.#sql-7d4_e'(错误号:150)

任何的想法?

小智 9

你必须将它分成两个Schema块,一个创建列,另一个添加FK.mysql不能同时做到这两点.


Isa*_*món 6

两个查询工作:

Schema::create('cb_category', function($table)
{
    $table->integer('id')->primary()->unique()->unsigned();
    $table->integer('parent_id')->nullable();  
});

Schema::table('cb_category', function (Blueprint $table) 
{
    $table->foreign('parent_id')->references('id')->on('cb_category')->onUpdate('cascade')->onDelete('cascade');
});
Run Code Online (Sandbox Code Playgroud)


ion*_*oni 5

对于聚会我可能为时已晚,但官方文档声称外键(对于整数)必须为 ->unsigned();

http://laravel.com/docs/4.2/schema#foreign-keys

注意:创建引用递增整数的外键时,切记始终使外键列为无符号。

另外,如果您(如我所知)输入了错误的拼写,Artisan不会失败,unsigned()并且我花了很多时间试图弄清楚为什么不创建密钥。

所以有两件事:1.在整数递增的情况下,始终使外键列无符号。2.检查的拼写。 unsigned()