如何在Laravel迁移中删除'morphs'列

时间:2019-01-18 15:25:35

标签: laravel eloquent laravel-migrations

我正在编辑一个表,以便它将使用多态关系:

public function up()
    {
        Schema::table('locations', function (Blueprint $table) {
            $table->morphs('location');
        });
    }

但是我不知道逆转此迁移的最佳方法。我是否必须删除它创建的两列以及索引本身,或者在Laravel的一行中是否有这样做的方法?谢谢。

2 个答案:

答案 0 :(得分:3)

Blueprint api中找到了它:

public function dropMorphs($name, $indexName = null)
{
    $this->dropIndex($indexName ?: $this->createIndexName('index', ["{$name}_type", "{$name}_id"]));

    $this->dropColumn("{$name}_type", "{$name}_id");
}

所以$table->dropMorphs('location');

答案 1 :(得分:0)

如果有人在处理同一问题时遇到此帖子,则仅使用像我这样的SQLite数据库时,SQLite不支持一次性删除列和索引。您将需要手动执行此操作,并将其拆分为多个修改,如下所示:

public function down(){
    Schema::table('locations', function (Blueprint $table) {
        $table->dropcolumn('location_id');
    });

    Schema::table('locations', function (Blueprint $table) {
        $table->dropcolumn('location_type');
    });
}