Migration 运行一个特定的Laravel迁移(单个文件)

Migration 运行一个特定的Laravel迁移(单个文件),migration,laravel,laravel-4,Migration,Laravel,Laravel 4,我不想在laravel 4上运行所有未完成的迁移。我有5次迁移。现在我只想运行一次迁移。 而不是:php artisan迁移 我想运行一个特定的迁移,比如:php artisan将我的_迁移_迁移到_运行看起来你做得不对 迁移是由Laravel一个接一个地执行的,按照创建迁移的确切顺序执行的,因此它可以跟踪执行情况和执行顺序。这样,Laravel将能够安全地回滚一批迁移,而不会破坏您的数据库 给用户手动执行它们的能力,就不可能知道(确实)如何回滚数据库中的更改 如果您确实需要在数据库中执行某些操

我不想在laravel 4上运行所有未完成的迁移。我有5次迁移。现在我只想运行一次迁移。 而不是:php artisan迁移
我想运行一个特定的迁移,比如:php artisan将我的_迁移_迁移到_运行

看起来你做得不对

迁移是由Laravel一个接一个地执行的,按照创建迁移的确切顺序执行的,因此它可以跟踪执行情况和执行顺序。这样,Laravel将能够安全地回滚一批迁移,而不会破坏您的数据库

给用户手动执行它们的能力,就不可能知道(确实)如何回滚数据库中的更改

如果您确实需要在数据库中执行某些操作,那么最好创建一个DDL脚本并在Web服务器上手动执行它

或者只是创建一个新的迁移并使用artisan执行它

编辑:

如果需要首先运行它,则需要首先创建它

如果只需要对它们重新排序,请将该文件重命名为第一个文件。迁移是使用TimeTemp创建的:

2013_01_20_221554_table
要在此迁移之前创建新迁移,可以命名它

2013_01_19_221554_myFirstMigration

这是一个很好的小片段,可以缓解运行Laravel 4迁移时的恐惧
php artisan迁移--假装
。这将只输出在运行实际迁移时会运行的SQL

听起来您最初的4次迁移已经运行。我猜,当您
phpartisan迁移时
只会运行最新的迁移

建议:确保你所有的上下动作都按照你的预期进行。我喜欢在运行迁移时运行up()、down()、up(),只是为了测试它们。如果您进行了5到6次迁移,并且意识到您无法轻松地回滚它们,这将是非常糟糕的,因为您没有将向下()与向上()100%匹配


就我的两分钱!希望
--假装
有帮助。

重新运行迁移的唯一方法是脏迁移。您需要打开数据库并删除migrations表中表示迁移的行


然后再次运行php artisan migrate。

只需将已运行的迁移移出app/config/database/migrations/文件夹即可。然后运行命令
php-artisan-migrate
。这对我来说是一种魅力。

如果只是为了测试,我就是这样做的:

就我而言,我有几个迁移,其中一个包含应用程序设置

当我测试应用程序时,并不是所有的迁移都已经设置好了,我只是将它们移动到一个新文件夹“future”中。artisan不会触及此文件夹,它只会执行您想要的迁移


肮脏的解决方法,但它有效…

我在另一篇文章中给出了这个答案,但您可以这样做:运行
artisan migrate
运行所有迁移,然后使用以下SQL命令更新迁移表,使迁移看起来像是一次运行一个:

SET @a = 0;  
UPDATE migrations SET batch = @a:=@a+1;
这会将批处理列更改为1,2,3,4。。等等。如果您只想影响某些迁移,请在此处添加
WHERE batch>=…
条件(并更新
@a
的初始值)


在此之后,您可以根据需要执行
artisan migrate:rollback
,并且它将一次一个地完成迁移。

如果要运行最新的迁移文件,请执行以下操作:

php artisan migrate
php artisan migrate --path=/database/migrations/migrations_file_name
您还可以在添加迁移之前恢复到:

php artisan migrate: rollback

您可以将迁移放在更多文件夹中并运行以下操作:

php artisan migrate --path=/app/database/migrations/my_migrations

这么简单。。。!只需转到您的迁移文件夹。将所有迁移文件移到另一个文件夹中。然后将所有迁移逐一返回到迁移文件夹中,并为其中一个(php artisan)运行迁移。当您将错误的迁移文件插入主迁移文件夹并在命令提示符下运行php artisan migrate时,将出现错误。

我也有同样的问题。 在第一个迁移文件中复制表创建代码,如下所示:

  public function up()
    {
        Schema::create('posts', function(Blueprint $table){
            $table->increments('id');
            // Other columns...
            $table->timestamps();
        });
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            // Other columns...
            $table->softDeletes()->nullable();
        });
    }
您还可以更改(减少)
批处理
迁移
表中的列号;)


然后运行
php artisan migrate

在迁移中抛出异常,如果您不想应用它,它将停止整个迁移过程


使用这种方法,您可以将一系列迁移分为多个步骤。

我知道有一种简单的方法,您只能在本地主机上进行迁移。

  • 根据需要修改迁移文件
  • 打开phpMyAdmin或用于查看数据库表的任何内容
  • 找到所需的表格并将其放下
  • 找到迁移表并打开它
  • 在此表的“迁移”字段下,找到所需的表名并删除其行
  • 最后,从命令行或终端运行命令
    php artisan migrate
    。这将只迁移数据库中迁移表中不存在的表
  • 这种方式是完全安全的,不会出现任何错误或问题,虽然它看起来像不专业的方式,但它仍然可以完美地工作


    祝您好运

    您可以从终端为迁移创建一个单独的目录,如下所示:

    mkdir /database/migrations/my_migrations
    
    然后将要运行的特定迁移移动到该目录,并运行以下命令:

    php artisan migrate --path=/database/migrations/my_migrations
    

    希望这有帮助

    我在第1行使用了return,因此之前的dbs将保留原样

    <?php
    
    use Illuminate\Support\Facades\Schema;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Database\Migrations\Migration;
    
    class CreateUsersTable extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            return;  // This Line
            Schema::create('users', function (Blueprint $table) {
                $table->increments('id');
                $table->string('name', 50);
                $table->string('slug', 50)->unique();
                $table->integer('role_id')->default(1);
                $table->string('email', 50)->unique();
                $table->timestamp('email_verified_at')->nullable();
                $table->string('mobile', 10)->unique();
                $table->timestamp('mobile_verified_at')->nullable();
                $table->text('password');
                $table->integer('can_login')->default(1);
                $table->rememberToken();
                $table->timestamps();
            });
        }
    
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            return;// This Line
            Schema::dropIfExists('users');
        }
    }
    

    这是我使用的一种糟糕的方法。。我将删除除我要迁移的特定文件之外的其他迁移文件,然后运行PHP artisan migrate迁移完成后,我将转到我的垃圾箱并恢复删除的文件

    对于仍对此感兴趣的任何人,Laravel 5更新:Laravel已实现一次运行一个迁移文件的选项(在5.7版中).

    您现在可以运行以下操作:
    php artisan迁移
    
        public function register()
        {
            $this->app->extend('migrator', function ($migrator, $app) {
                return new MultipleSpecificMigrationsEnabledMigrator($migrator);
            });
    
            // We reset the command.migrate bind, which uses the migrator - to 
            // force refresh of the migrator instance.
            $this->app->instance('command.migrate', null);
        }
    
    php artisan migrate --path=/database/migrations/migrations_file_name
    
    C:\xampp\htdocs\laravelv3s>php artisan migrate --path=/database/migrations/2020_02_14_102647_create_blogs_table.php