Laravel 5.4特定表迁移


Answers:


132

首先,您应该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/

谢谢。这正是我想要的。
sadiq

4
php artisan migration --path = database / migrations / test /为我工作
Joyal

如果不工作了,你有一个更好的答案stackoverflow.com/questions/19102197/...
哈日哈克

76

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

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

1
辛苦了 没什么用,但您的解决方案也有用。非常感谢。
Vipertecpro

正是我在寻找:)谢谢你的伴侣
VishalParkash

有时它将是没有第一反斜杠的database / migrations / fileName.php
艾哈迈德·阿布德

值得一提的是,刷新后所有数据都消失了。如果希望保留数据,则应将数据另存为db,并在刷新后将其导入。
塔拉尼斯

@Taranis仅刷新您要刷新的表的数据
Wissem SASSI

54

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

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

希望你能理解。


@MartneyAcha很高兴您已经解决了您的问题,干杯!
Sagar Gautam

很好的解释。如果您的表中有外键关系,那将不起作用
Ogbonna Vitalis

@OgbonnaVitalis谢谢,这将是独立表的更简便方法。接受的答案提供了回滚和迁移单个表的确切方法。对于多个独立表,它将起作用。
Sagar Gautam '18

14

如果您使用标签进行自动填充

php artisan migrate --path='./database/migrations/2019_12_31_115457_create_coworking_personal_memberships_table.php'

使用zsh对我不起作用
digout

8

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

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

如果需要回滚:

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

注意:

php artisan migrate:refresh

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


无需创建新目录,您可以直接放置文件名,例如'--path = / database / migrations / fileName.php'。
Wissem SASSI,

7
php artisan help migrate

您将看到以下选项:

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

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

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

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

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

您只是错过了一个“ s”。应该是“移民”!php artisan migrate --path = / database / migrations / new_folder
Pasindu Jayanath '18

php artisan migration --path = / database / migrations / new_folder /需要最后一个'/'
Pasindu Jayanath

7

你可以这样运行命令

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

5

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

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

它只会迁移您需要的表,而不会涉及其他任何内容



3

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

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

php artisan migrate

3

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

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

1
无需迁移。
zod19


3

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

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

2

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


1

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

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


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');
    }

如果要添加另一个文件,如“状态”,而不进行迁移:刷新。您可以创建另一个迁移文件,例如“ 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,它只会迁移新的迁移文件。

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

希望对您有所帮助。



1

PHP的工匠迁移--path = / database / migrations / fileName.php

只需按照指令执行此命令文件名,此处应为您的迁移表名示例:php artisan migration --path = / database / migrations / 2020_02_21_101937_create_jobs_table.php



0

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

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

希望这对您有所帮助。编码愉快。


-1

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

步骤1:

php artisan migrate:rollback

第2步:

php artisan migrate

您的表将返回数据库中。


如果对每个步骤进行简短描述,将会更有帮助。这将有助于理解用户的实际情况。这看起来像一个骗子代码,神奇地使事情起作用,但是在某些情况下结果可能会很糟糕。
Ashwani Agarwal

请仔细阅读问题,该人员只要求一个表,您的方法将回滚所有迁移,然后创建所有表。也php artisan migration:refresh一样。
Wajahat Hashmi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.