2

我正在为 Laravel 使用 ClosureTable。我在迁移时遇到问题。

这是我的迁移脚本的样子:

//Page_Closure 迁移脚本

public function up()
{
    Schema::table('page_closure', function(Blueprint $table)
    {
        $table->engine = 'InnoDB';

        Schema::create('page_closure', function(Blueprint $t)
        {
            $t->increments('ctid');

            $t->integer('ancestor', false, true);
            $t->integer('descendant', false, true);
            $t->integer('depth', false, true);
              //problem after this line.
            $t->foreign('ancestor')->references('id')->on('pages');
            $t->foreign('descendant')->references('id')->on('pages');
        });
    });
}

创建外键时发生错误。IDK 为什么,但是根据我的迁移队列,“页面关闭”首先在“页面”脚本之前运行。

 [Illuminate\Database\QueryException]                                                                                                              
  SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'page_closure' already exists (SQL: create table `page_closure` (`ctid` int unsign  
  ed not null auto_increment primary key, `ancestor` int unsigned not null, `descendant` int unsigned not null, `depth` int unsigned not null) defa  
  ult character set utf8 collate utf8_unicode_ci)  
4

1 回答 1

2

Schema::table('page_closure', ...)然后Schema::create('page_closure', ...)在里面做。您基本上是在告诉 Laravel 找到一个名为 page_closure 的现有表,然后创建一个具有相同名称的表。这就是您收到“表 'page_closure' 已存在”错误的原因。

你不需要这个Schema::table()部分。把你$table->engine = 'InnoDB'Schema::create()像这样放在你的...

public function up()
{
    Schema::create('page_closure', function(Blueprint $t)
    {
        $table->engine = 'InnoDB';

        $t->increments('ctid');
        // ... the rest of the columns
    }
}

似乎您的表也已创建,但迁移尚未完成。因此,您的迁移表可能已损坏。您将需要手动删除表并再次运行迁移。

于 2014-07-07T05:12:29.937 回答