115

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

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

4

26 回答 26

171

首先,您应该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/
于 2017-08-03T06:18:17.360 回答
130

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

php artisan migrate:refresh --path=/database/migrations/fileName.php
于 2019-04-01T13:25:35.860 回答
58

只要看一下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定义了迁移的顺序。当您回滚时,最新的或具有最高批处理值的迁移将首先回滚,然后再回滚其他迁移。因此,您可以更改数据库中的值,然后回滚特定的迁移文件。

虽然由于表结构的关系,每次都更改批号不是一个好主意,但我们可以在一些单表回滚不破坏表间完整性的情况下使用这种情况。

希望你能理解。

于 2017-08-03T02:14:44.073 回答
22

如果您使用选项卡进行自动完成

php artisan migrate --path='./database/migrations/2019_12_31_115457_create_coworking_personal_memberships_table.php'
于 2019-12-31T07:25:30.353 回答
13
php artisan migrate --path=database/migrations/2020_04_10_130703_create_test_table.php

注意

之后 --path 没有/之前

于 2021-02-16T12:49:21.370 回答
12

你可以像这样运行命令

php artisan migrate --path=/database/migrations/2020_04_10_130703_create_test_table.php
于 2020-04-10T14:14:37.673 回答
10

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

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

如果您需要回滚:

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

笔记:

php artisan migrate:refresh

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

于 2018-11-23T14:13:15.767 回答
8

您只能在终端中运行此命令

php artisan migrate --path=database/migrations/2020_10_01_164611_create_asset_info_table.php

迁移后,您应该输入特定的文件名。或者,如果您在迁移中有任何文件夹,则只需在迁移后添加该文件夹名称。

像这样

php artisan migrate --path=database/migrations/yourfolder/2020_10_01_164611_create_asset_info_table.php

我希望这会对你有所帮助。快乐编码。

于 2020-10-01T11:37:31.927 回答
7
php artisan help migrate

您将看到以下选项:

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

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

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

或者,您可以在迁移中创建一个新文件夹,然后在其中迁移您想要的所有迁移文件:

php artisan migrate --path=/database/migrations/new_folder
于 2018-10-19T05:13:49.297 回答
6

如果要创建一个特定的表。您可以使用此代码。它适用于 laravel(5.x) 版本。

php artisan migrate:refresh --path=/database/migrations/fileName.php
于 2020-02-11T13:03:35.037 回答
5

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

  1. 在迁移表中找到带有您的迁移名称的行并将其删除。它应该看起来像这样:2016_06_01_000001_create_oauth_auth_codes_table
  2. 从数据库中删除您的表,例如 DROP TABLE oauth_auth_codes
  3. 运行 php artisan 迁移

它只会迁移您需要的表,不会触及其他任何东西

于 2018-12-07T11:36:09.740 回答
5

更正-删除数据库前的斜线

$ php artisan migrate --path=database/migrations/migration.php
于 2019-06-26T20:51:14.700 回答
5

获取迁移的实际文件名和路径并运行如下命令

php artisan migrate --path=/database/migrations/2021_10_03_071450_create_reset_codes_table.php
于 2021-10-03T09:12:06.980 回答
4
php artisan migrate --path=/database/migrations/fileName.php

您不必为迁移而刷新,因为刷新意味着:回滚 所有迁移并再次运行它们

于 2021-02-18T04:53:12.067 回答
4

对于特定文件运行此命令:

php artisan migrate:refresh --path="database\migrations\Your_Migration_File_Name_table.php"

--file= 是您文件的位置,migrate:refresh将清空您的表数据

如果要从数据库中清空所有表的数据,请运行

php artisan migrate:refresh命令。
于 2021-09-02T15:22:18.010 回答
3

你只能回滚:

php artisan migrate:rollback

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

您可以使用 'step' 选项指定要回滚的迁移数量:

php artisan migrate:rollback --step=1

这里有一些技巧:

在 Laravel 中回滚一个特定的迁移

于 2017-08-03T02:15:27.253 回答
3

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

之后,您只需再次运行迁移:

php artisan migrate
于 2017-11-10T05:46:12.583 回答
3

特定表迁移

php artisan migrate --path=/database/migrations/fileName.php
于 2019-12-26T14:01:33.723 回答
2

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

于 2018-06-29T08:15:34.620 回答
1

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

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

于 2017-08-03T02:16:53.593 回答
1

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

如果您创建一个users_tableid, 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');
    }

如果您想在不使用 migrate:refresh 的情况下添加另一个字段,例如“status”。您可以创建另一个迁移文件,例如“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 artisan migration,只需迁移新的迁移文件。

但是,如果您将字段“状态”添加到第一个迁移文件 (users_table) 中并运行迁移。迁移没什么。你需要运行php artisan migrate:refresh.

希望这有帮助。

于 2017-08-03T02:21:30.457 回答
1

安装这个包

https://github.com/nilpahar/custom-migration/

并运行此命令。

php artisan migrate:custom -f migration_name
于 2019-10-24T06:45:26.343 回答
1

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

只需按照说明执行此命令文件名这里应该是您的迁移表名称示例:php artisan migrate --path=/database/migrations/2020_02_21_101937_create_jobs_table.php

于 2020-02-22T08:37:22.617 回答
0

你可以使用这个。

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

-> https://github.com/nilpahar/custom-migration/

这很容易使用

于 2018-10-14T17:33:19.097 回答
0

您也可以再次迁移已迁移的表,但首先您需要进入数据库迁移表并删除该特定迁移名称的行。然后点击 php artisan migrate

于 2021-05-18T12:28:07.450 回答
-1

首先,您应该执行以下命令:

步骤1:

php artisan migrate:rollback

第2步:

php artisan migrate

您的表将回到数据库中。

于 2020-05-03T02:13:53.203 回答