Laravel 5.4特定表迁移

问题描述 投票:27回答:13

您好,请阅读https://laravel.com/docs/5.4/migrations中包含的所有文档。

有没有办法如何迁移某个迁移文件(仅迁移1个),因为每次有更改时我都会使用php artisan migrate:refresh并且所有字段都会重置。

laravel migration laravel-5.4
13个回答
50
投票

首先,您应该为您的表创建一个migration文件,如:

public function up()
    {
        Schema::create('test', function (Blueprint $table) {
            $table->increments('id');
            $table->string('fname',255);
            $table->string('lname',255);
            $table->rememberToken();
            $table->timestamps();
        });
    }

在迁移文件夹中创建测试文件夹之后,新创建的迁移在测试文件夹中移动/复制并在终端/ cmd中的命令下运行,如:

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

1
投票

您可以尝试使用--path =选项来定义要执行的特定子文件夹,并在其中放置特定的迁移。

或者,您需要从DB和迁移表中删除不理想的引用和表:/


1
投票

如果要创建另一个表,只需创建一个新的迁移文件。它会起作用。

如果使用users_table创建名为id, first_name, last_name的迁移。您可以创建一个迁移文件

    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('first_name',255);
            $table->string('last_name',255);
            $table->rememberToken();
            $table->timestamps();
        });
    }
    public function down()
    {
        Schema::dropIfExists('users');
    }

如果要添加另一个字段,如“status”而不迁移:refresh。您可以创建另一个迁移文件,例如“add_status_filed_to_users_table”

public function up()
{
    Schema::table('users', function($table) {
        $table->integer('status');
    });
} 

并且不要忘记添加回滚选项:

public function down()
{
    Schema::table('users', function($table) {
        $table->dropColumn('status');
    });
}

当您使用php artitsan migration运行迁移时,它只迁移新的迁移文件。

但是,如果将“status”字段添加到第一个迁移文件(users表)中并运行迁移。迁移没什么。你需要运行qazxsw poi。

希望这有帮助。


1
投票

更正 - 在数据库之前删除斜杠

php artisan migrate:refresh

0
投票

你可以用它。

- > $ php artisan migrate --path=database/migrations/migration.php

- > https://packagist.org/packages/sayeed/custom-migrate

这很容易使用


0
投票

简单的方法是在PHPMyAdmin for Mongodb中删除你的表格,然后运行qazxsw poi


40
投票

只需查看数据库中的migrations表,就会有一个迁移文件名和批号值列表。

假设你有以下结构,

id     migration                                           batch

1      2014_10_12_000000_create_users_table                  1 
2      2014_10_12_100000_create_password_resets_table        1
3      2016_09_07_103432_create_tabel_roles                  1

如果您只想回滚2016_09_07_103432_create_tabel_roles迁移,请将其迁移批处理值更改为2,这是最高的,然后执行以下操作。

php artisan migrate:rollback

此处仅回滚具有批次值2的表。现在,对该表进行更改并运行以下控制台命令。

php artisan migrate

migrations表中的批处理值定义了迁移的顺序。回滚时,最新或具有最高批次值的迁移将首先回滚,然后回滚。因此,您可以更改数据库中的值,然后回滚特定的迁移文件。

虽然由于表结构之间的关系,每次更改批次编号不是一个好主意,但我们可以将这种情况用于单表回滚不违反表之间完整性的某些情况。

希望你能理解。


11
投票

您应该添加迁移文件的路径以刷新此表并运行

php artisan migrate:refresh --path=/database/migrations/fileName.php

5
投票

只是想发布另一个解决方案,我认为值得一提。

  1. 在迁移表中查找具有迁移名称的行并删除它。它应如下所示:2016_06_01_000001_create_oauth_auth_codes_table
  2. 从数据库中删除表格,例如DROP TABLE oauth_auth_codes
  3. 运行php artisan migrate

它只会迁移您需要的表格,并且不会触及任何其他表格


3
投票

你只能回滚:

php artisan migrate:rollback

https://laravel.com/docs/5.4/migrations#rolling-back-migrations

您可以使用“步骤”选项指定要回滚到的迁移次数:

php artisan migrate:rollback --step=1

这里有一些技巧:

Rollback one specific migration in Laravel


3
投票

删除表并从迁移表中删除其记录。

之后,您再次运行迁移:

php artisan migrate

3
投票
php artisan help migrate

你会看到选项:

--path [= PATH]要执行的迁移文件的路径

顺便说一下,您可以指出要迁移的文件的根文件夹:

php artisan migrate --path=/database/migrations/sample.php

或者,您可以在迁移中创建新文件夹,然后迁移所需的所有迁移文件:

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

3
投票

您需要将文件放入新目录(例如:选中),然后应用

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

如果你需要回滚:

php artisan migrate:rollback  --path=/database/migrations/selected

注意:

php artisan migrate:refresh

这将回滚然后迁移默认目录中的所有迁移文件(/ database / migrations)


2
投票

或者您可以在“迁移”表中从数据库中删除迁移文件名,然后运行:php artisan migration

© www.soinside.com 2019 - 2024. All rights reserved.