【问题标题】:Laravel Migrate Specific File(s) from MigrationsLaravel 从迁移中迁移特定文件
【发布时间】:2018-01-10 10:24:50
【问题描述】:

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

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

【问题讨论】:

    标签: laravel laravel-5 migration laravel-8


    【解决方案1】:

    只要看看你数据库中的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 很高兴您找到了解决问题的方法 干杯!!
    • 很好的解释。如果您的表中有外键关系,那将不起作用
    • @OgbonnaVitalis 谢谢,独立表会更简单。接受的答案提供了回滚和迁移单个表的确切方法。对于多个独立的表,它会起作用。
    【解决方案2】:

    你只能回滚:

    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】:

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

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

      【讨论】:

        【解决方案4】:

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

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

            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

        希望对您有所帮助。

        【讨论】:

          【解决方案5】:

          首先,您应该为您的表创建一个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();
                  });
              }
          

          migrations 文件夹中创建 test 文件夹后,然后将新创建的 migration 移动/复制到 test 文件夹并运行终端/cmd 中的以下命令,例如:

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

          【讨论】:

          【解决方案6】:

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

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

          php artisan migrate
          

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              【解决方案8】:

              【讨论】:

              • 您的答案并非来自经过验证的链接。
              【解决方案9】:
              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
              • php artisan migrate --path=/database/migrations/new_folder/ 需要最后一个'/'
              【解决方案10】:

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

              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'。
              【解决方案11】:

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

              1. 在迁移表中找到带有您的迁移名称的行并将其删除。 它应该如下所示:2016_06_01_000001_create_oauth_auth_codes_table
              2. 从数据库中删除您的表,例如删除表 oauth_auth_codes
              3. 运行 php artisan migrate

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

              【讨论】:

                【解决方案12】:

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

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

                【讨论】:

                • 干得好,伙计。没有任何效果,但您的解决方案有效。非常感谢。
                • 正是我在寻找 :) 谢谢你的伙伴
                • 有时它会是 database/migrations/fileName.php 没有第一个反斜杠
                • 值得一提的是,刷新后所有数据都消失了。如果您希望保留数据,则应将数据库中的数据保存为导出并在刷新后导入。
                • @Taranis 只是你正在刷新的表的数据不是全部
                【解决方案13】:

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

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

                【讨论】:

                • 没有要迁移的东西。
                【解决方案14】:

                安装这个包

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

                并运行此命令。

                php artisan migrate:custom -f migration_name
                

                【讨论】:

                  【解决方案15】:

                  特定表迁移

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

                  【讨论】:

                    【解决方案16】:

                    如果你使用 tab 来自动完成

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

                    【讨论】:

                      【解决方案17】:

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

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

                      【讨论】:

                        【解决方案18】:

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

                        只要按照指令执行这个命令文件名这里应该是你的迁移表名 例子: php artisan migrate --path=/database/migrations/2020_02_21_101937_create_jobs_table.php

                        【讨论】:

                          【解决方案19】:

                          你可以像这样运行命令

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

                          【讨论】:

                            【解决方案20】:

                            首先你应该执行以下命令:

                            第 1 步:

                            php artisan migrate:rollback
                            

                            第 2 步:

                            php artisan migrate
                            

                            您的表将回到数据库中。

                            【讨论】:

                            • 如果对每个步骤进行小描述会更有帮助。这将有助于了解用户实际发生的情况。这看起来像是一个神奇的作弊码,但在某些情况下结果可能是灾难性的。
                            • 请仔细阅读问题,该人只要求一张表,您的方法将回滚所有迁移然后创建所有表。 php artisan migration:refresh 也一样。
                            【解决方案21】:

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

                            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
                            

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

                            【讨论】:

                              【解决方案22】:
                              php artisan migrate --path=database/migrations/2020_04_10_130703_create_test_table.php
                              

                              注意

                              之后 --path 没有/之前

                              【讨论】:

                                【解决方案23】:
                                php artisan migrate --path=/database/migrations/fileName.php
                                

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

                                【讨论】:

                                  【解决方案24】:

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

                                  【讨论】:

                                    【解决方案25】:

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

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

                                    这里 --file= 是你文件的位置,migrate:refresh会清空你的表数据

                                    如果你想从数据库中清空所有表的数据然后运行

                                    php artisan migrate:refresh 命令。

                                    【讨论】:

                                    • php artisan migrate:refresh --path=database/migrations/2021_10_16_071955_create_aaa_table.php 不是 "\" 它应该是 "/" 并且没有 "
                                    【解决方案26】:

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

                                    php artisan migrate --path=/database/migrations/2021_10_03_071450_create_reset_codes_table.php
                                    

                                    【讨论】:

                                      猜你喜欢
                                      • 2021-02-28
                                      • 2019-02-25
                                      • 2021-03-14
                                      • 2022-09-29
                                      • 2017-09-18
                                      • 2016-06-19
                                      • 2019-12-05
                                      • 2017-02-23
                                      • 1970-01-01
                                      相关资源
                                      最近更新 更多