我是否需要重建整个数据库以进行迁移的单个更改

时间:2017-05-31 10:26:40

标签: laravel migration

我对Laravel中迁移的实际使用感到困惑;请帮我澄清一下。

假设我已经使用create_blabla_table.php迁移设置了所有表格,现在我决定公司表格不仅需要名称而且还需要一个slug列。

SO。我去create_companies_table.php并编辑它:我添加字符串字段slug。

这种变化是如何通过的?我现在需要重置整个数据库并重新播种所有表吗?或者我可以更新这个表吗?

或者我应该创建一个新的迁移文件,如add_company_slug_field.php。但是后来我将有很多迁移文件,我可能会忘记它。

3 个答案:

答案 0 :(得分:1)

您需要做的是生成一个新的迁移,以您希望的方式修改表格,然后运行 php artisan migrate

答案 1 :(得分:1)

如果您在迁移中更改了列,则应遵循两个步骤

  1. 还原
  2. 迁移
  3. 当您运行命令php artisan migrate:rollback时,将回滚整个迁移,当您运行php artisan migrate时,所有迁移都将在默认情况下迁移,您应该运行种子。

    如果您具有没有外键约束的独立表,则可以通过在迁移表中递增表批次来执行单表迁移。更改批号后,只需使用artisan命令回滚和迁移表。

    对于具有外键的表,应该在子节点之前创建父节点,因为迁移中的顺序错误可能会发生错误。

    您可以通过递增批量值来对表组进行回滚/迁移操作。

    通过这种方式,您可以更改特定的表格。

答案 2 :(得分:1)

实际上有两种方式..首先是

php artisan migrate:rollback

然后在重新运行之前更新您的迁移文件..

php artisan migrate

但这会清除已保存在数据库中的所有记录..

如果您不想要另一种方法是使用

创建新的迁移

更新栏目属性

Schema::table('users', function (Blueprint $table) {
    $table->string('name', 50)->nullable()->change();
});

重新开始一个栏目

Schema::table('users', function (Blueprint $table) {
    $table->renameColumn('from', 'to');
});

删除栏目

Schema::table('users', function (Blueprint $table) {
    $table->dropColumn(['votes', 'avatar', 'location']);
});

NEW COLUMN

Schema::table('users', function (Blueprint $table) {
    $table->string('email');
});
  

然后有一个快捷方式,但 不是一个好习惯 ..更新您的迁移文件..然后手动更新数据库..

相关问题