【问题标题】:I broke my Laravel framework with migration renaming我用迁移重命名破坏了我的 Laravel 框架
【发布时间】:2021-01-14 18:23:02
【问题描述】:

我有一个良好的 Laravel 结构,可以进行数据库迁移和播种。 但我希望我的迁移文件、类、db 表重命名为 CreateOrganizationsTable 而不是 CreateOrganisationsTable

所以我更改了迁移文件名、所有类和路由。

但是当我在 Homestead 框中执行 php artisan migrate:reset 时,出现以下错误:

PHP Fatal error: Class 'CreateOrganisationsTable' not found in /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php on line 299

Artisan 创建了一些我目前无法修复的链接。

【问题讨论】:

  • 你可以重命名它以使其工作吗?
  • 你做过composer dump-autoload吗?
  • 我在重命名迁移类后立即执行 composer dump-autoload 让它重新工作。如果您在 composer 命令之前执行任何 php artisan migrate 命令,则 composer dump-autoload 没有任何效果。所以命令顺序很关键。谢谢马克
  • 你也试过运行:php artisan dump-autoload?
  • composer dump-autoload 重命名文件后,migrations 表中的列对我有用!

标签: php laravel


【解决方案1】:

正如 Morale 所说,您必须在新迁移之前重置或回滚到某个点,或者手动进行更改。我知道这一点,但在仅更改时间戳以使迁移以不同的顺序运行后仍然遇到问题。

即使您没有更改类名,您也必须运行composer dump-autoload

【讨论】:

  • 太棒了!谢谢!
【解决方案2】:

不要忘记重命名文件中的类

【讨论】:

  • 为了详细说明这一点,如果我要将迁移重命名为 create_tags_tableclass CreateResourceTagsTable extends Migration 需要变为 class CreateTagsTable extends Migration
【解决方案3】:

php artisan:rollback 也遇到过类似的问题,刚打开我的 laravel 项目,进入下一个目录:

供应商\composer\autoload_static.php

并修改了已更改的 php 迁移的名称,希望对您有所帮助:)

【讨论】:

    【解决方案4】:

    问题是当你运行migrate:reset 命令时,artisan 想在所有类上调用down 方法。而且自从你重命名了班级,他再也找不到了!

    因此,在重命名您的类和/或文件之前,请运行 php artisan migrate:reset,这将清理您的数据库并删除所有表,然后只需运行 php artisan migrate。您应该再次拥有一个工作数据库。

    如果migrate:reset 命令仍然不起作用,您可以简单地手动删除表(不要忘记删除迁移表)并再次运行php artisan migrate

    编辑:如果您实际上不想运行migrate:reset,而只是重命名迁移,您可以编辑文件(和类)的名称。但之后您必须手动编辑数据库中的表migrations。找到相应的行,并编辑文件的名称以匹配新名称。

    【讨论】:

      【解决方案5】:
      1. 重命名文件
      2. 重命名类
      3. 重命名数据库中“迁移”表中的“迁移”列。

      【讨论】:

        【解决方案6】:

        我已经执行了 composer dump-autoload,现在一切正常

        【讨论】:

          【解决方案7】:

          在 laravel 中,如果您以正确的方式进行重命名迁移,则可以正常工作。

          我还多次重命名了我的迁移文件,它按预期工作,

          但如果您想重命名迁移,那么您必须注意两件事

          1. 先重命名文件名

          2. 打开该迁移文件并同时重命名类名称

          重命名文件: 将您的文件名从 2019_06_28_131130_create_organisations_table 更改为 2019_06_28_131130_create_organizations_table 或任何您想要的名称。

          打开该迁移文件并根据您的新名称重命名该文件中的类名

          <?php
          
          use Illuminate\Support\Facades\Schema;
          use Illuminate\Database\Schema\Blueprint;
          use Illuminate\Database\Migrations\Migration;
          
          //change it from
          //class CreateOrganisationsTable extends Migration {
          //to
          class CreateOrganizationsTable extends Migration {
          

          我认为您已经重命名了迁移文件,但您忘记了重命名类名,所以这样做并尝试运行 php artisan migrate:refresh 它会按您的意愿工作。

          【讨论】:

            【解决方案8】:

            如果您使用的是 composer,那么我认为您忘记了转储自动加载

            composer dump-autoload
            

            【讨论】:

              【解决方案9】:

              如果以上所有方法都失败了,就像他们为我做的那样,尝试直接设置表的名称

              class NameModel extends Model {
                  public $table = 'name_exact_of_the_table';
              

              通过How to fix error Base table or view not found: 1146 Table laravel relationship table?回复https://stackoverflow.com/users/1607975/jpasosa

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2014-09-15
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-10-29
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多