Laravel5 迁移:复制现有表

6
我有一个名为 "table_1" 的表格,它是通过多次迁移(添加/更改字段)来制定的。
我想要创建一个新的表格 "copy_of_table_1" (使用迁移),其结构与 "table_1" 相同。最好的方法是什么?
我希望避免创建新的迁移并复制粘贴所有添加和更改的字段。
2个回答

19

您可以使用原始查询来完成这个操作:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\DB;

class MyNewTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        DB::statement('CREATE TABLE newtable LIKE oldtable; ');
    }


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

}

绝对不建议,但是可能实现。


这种方法有哪些缺点? - keizah7
为什么迁移需要这样做时会被明确地不推荐呢? - digout
主要是因为你在这里使用了 SQL 语句而不是 Laravel,所以一眼看起来就不太容易理解。同时可能会存在迁移失败和重新运行的潜在问题。 - Samsquanch

0
最好的方法是创建新的迁移,并从所有添加/更改迁移中添加字段。我在这里没有看到任何更聪明的解决方案。

1
我想避免创建新的迁移并复制粘贴所有字段(有超过20个迁移)。 - David
好的,你要求最佳的方法。)其他做法都更糟糕。看,你仍然需要创建一个迁移(如你所说,你想使用迁移)。如果你不想使用迁移,你可以复制现有表的CREATE子句,修改表名并运行该子句。 - Alexey Mezenin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接