Laravel 是否需要通过迁移为单个更改重建整个数据库

Laravel 是否需要通过迁移为单个更改重建整个数据库,laravel,migration,Laravel,Migration,我对迁移在拉拉维尔的实际用途感到困惑;请帮我弄清楚 假设我用create_bla_table.php迁移设置了所有表,现在我决定company表不仅需要一个名称,还需要一个slug列 所以。我进入create_companys_table.php并编辑它:添加字符串字段slug 这种变化是如何实现的?我现在是否需要重置整个数据库并重新设置所有表的种子?或者我可以更新这个表吗 或者我应该创建一个新的迁移文件,比如add_company_slug_field.php。但是我会有很多迁移文件,我可能会

我对迁移在拉拉维尔的实际用途感到困惑;请帮我弄清楚

假设我用create_bla_table.php迁移设置了所有表,现在我决定company表不仅需要一个名称,还需要一个slug列

所以。我进入create_companys_table.php并编辑它:添加字符串字段slug

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


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

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

您需要做的是生成一个新的迁移,以您想要的方式修改表,然后运行php artisan migrate,如果您有在迁移过程中,您应该遵循两个步骤

  • 回滚
  • 迁移
  • 当您运行命令
    php artisan migrate:rollback
    时,将回滚整个迁移,当您运行
    php artisan migrate
    时,所有迁移都将在默认情况下迁移,并且您应该运行播种机

    若您有不带外键约束的独立表,那个么可以通过增加迁移表中的表批次号来执行单表迁移。更改批号后,只需使用artisan命令回滚并迁移表

    对于具有外键的表,应该在子表之前创建父表,因为迁移顺序错误,可能会在某个时间发生错误

    您还可以通过增加批处理值对表组执行回滚/迁移操作


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

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

  • 回滚
  • 迁移
  • 当您运行命令
    php artisan migrate:rollback
    时,将回滚整个迁移,当您运行
    php artisan migrate
    时,所有迁移都将在默认情况下迁移,并且您应该运行播种机

    若您有不带外键约束的独立表,那个么可以通过增加迁移表中的表批次号来执行单表迁移。更改批号后,只需使用artisan命令回滚并迁移表

    对于具有外键的表,应该在子表之前创建父表,因为迁移顺序错误,可能会在某个时间发生错误

    您还可以通过增加批处理值对表组执行回滚/迁移操作


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

    实际上有两种方法。。首先是

    php artisan迁移:回滚

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

    php artisan迁移

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

    如果您不想这样做,另一种方法是使用

    更新列属性

    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']);
    });
    
    Schema::table('users', function (Blueprint $table) {
        $table->string('email');
    });
    
    删除列

    Schema::table('users', function (Blueprint $table) {
        $table->renameColumn('from', 'to');
    });
    
    Schema::table('users', function (Blueprint $table) {
        $table->dropColumn(['votes', 'avatar', 'location']);
    });
    
    Schema::table('users', function (Blueprint $table) {
        $table->string('email');
    });
    
    新列

    Schema::table('users', function (Blueprint $table) {
        $table->renameColumn('from', 'to');
    });
    
    Schema::table('users', function (Blueprint $table) {
        $table->dropColumn(['votes', 'avatar', 'location']);
    });
    
    Schema::table('users', function (Blueprint $table) {
        $table->string('email');
    });
    
    还有一个捷径,但不是一个好的做法。。更新迁移文件。。然后手动更新数据库


    实际上有两种方法。。首先是

    php artisan迁移:回滚

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

    php artisan迁移

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

    如果您不想这样做,另一种方法是使用

    更新列属性

    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']);
    });
    
    Schema::table('users', function (Blueprint $table) {
        $table->string('email');
    });
    
    删除列

    Schema::table('users', function (Blueprint $table) {
        $table->renameColumn('from', 'to');
    });
    
    Schema::table('users', function (Blueprint $table) {
        $table->dropColumn(['votes', 'avatar', 'location']);
    });
    
    Schema::table('users', function (Blueprint $table) {
        $table->string('email');
    });
    
    新列

    Schema::table('users', function (Blueprint $table) {
        $table->renameColumn('from', 'to');
    });
    
    Schema::table('users', function (Blueprint $table) {
        $table->dropColumn(['votes', 'avatar', 'location']);
    });
    
    Schema::table('users', function (Blueprint $table) {
        $table->string('email');
    });
    
    还有一个捷径,但不是一个好的做法。。更新迁移文件。。然后手动更新数据库


    因此,我可能需要一个带有alter table语句的新迁移?是的,您可以这样做,然后就不需要rollbackSo我可能需要一个带有alter table语句的新迁移?是的,您可以这样做,然后就不需要rollback