【问题标题】:Can't start Laravel, I get "Base table or view not found" error无法启动 Laravel,出现“未找到基表或视图”错误
【发布时间】:2017-07-19 14:33:17
【问题描述】:

首先我错误地回滚了 2 个迁移,然后我运行了 php artisan migrate 命令并收到以下错误:

[Illuminate\Database\QueryException] SQLSTATE[42S02]: Base table or view not found: 1146 Table 'exercise1.categories' doesn't exist (SQL: select * from categories where parent_id = 0) [PDOException] SQLSTATE[42S02]: Base table or view not found: 1146 Table 'exercise1.categories' doesn't exist

然后我停止了 Laravel。之后,当我运行 php artisan serve 命令来启动 Laravel 时,我得到了同样的错误。 以下是我回滚的 2 个迁移:

1.

class CreateCategoriesTable extends Migration
    {

        public function up()
        {
            Schema::create('categories',function (Blueprint $table){
                $table->increments('id');
                $table->string('name');
                $table->text('parent_id');
                $table->timestamps();
        });
        }
        public function down()
        {
            Schema::dropIfExists('categories');
        }
    }

2.

class CreateArticlesTable extends Migration
    {
        public function up()
        {
            Schema::create('articles', function (Blueprint $table) {
                $table->increments('id');
                $table->string('title')->nullable(false);
                $table->longText('article')->nullable(false);
                $table->integer('user_id')->unsigned();
                $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
                $table->timestamps();
            });
        }
        public function down()
        {
            Schema::dropIfExists('articles');
        }
    }

请帮我解决这个令人沮丧的问题。非常感谢所有答案,在此先感谢。

【问题讨论】:

  • 执行composer dumpautoload 然后再次尝试迁移。
  • 如果您尝试删除没有 dropIfExists() 的表,或者当您为外键引用 categories 表时,您通常会收到此错误 - 您不是在你的展示代码中做。您是否可能尝试在其他迁移中引用 categories 表?也许您尝试在以后的迁移中将外键添加到您的 parent_id(一个疯狂的猜测)?
  • 为了进一步调试,请检查 app/storage/logs/laravel.log 中文件的结尾——它准确地指出了问题发生的位置
  • @aynber,我已经尝试过了,没有成功。所有 php artisan 命令都给出相同的错误。
  • @devk 感谢您的建议。我没有在其他迁移中引用 categories 表。在后面的迁移中,我没有向 parent_id 添加外键。

标签: php laravel laravel-migrations


【解决方案1】:

如果您遇到此问题并且不是由迁移文件引起的,那么很可能是由于 2 个可能的原因。

  1. 检查 ServiceProviders 的引导函数是否包含查询不存在的表的查询。
  2. 检查您是否已创建自定义辅助函数并在 composer.json 文件中自动加载该辅助函数。如果自定义帮助函数包含查询不存在的表的查询,则会导致此错误。

由于 Laravel 启动时会首先加载 ServiceProviders 的引导函数和自动加载的自定义帮助函数,因此所有 php artisan 命令都会生成“未找到基表或视图”错误。

此时你应该做的是注释掉那些查询不存在的表的查询并运行php artisan serve,然后运行php artisan migrate。然后取消注释这些行,保存它,一切都应该正常。

正如@devk 建议的那样,最好检查 laravel 日志文件,它准确地指向问题发生的位置。它使我找到了解决方案。 为此不要忘记Turn on debug mode.

【讨论】:

    【解决方案2】:

    回滚这些迁移后,您已删除 categoriesarticles 表。所以只需再次运行migrate 命令:

    php artisan migrate
    

    【讨论】:

    • 我认为这就是他得到错误的地方。 “首先我错误地回滚了 2 次迁移,然后我运行了 php artisan migrate 命令并出现以下错误”
    • 感谢您的回答。但正如我上面提到的,我已经尝试过了,我得到了同样的错误。
    • @MahammadIsgandarli 您是否还有其他使用categories 表的迁移(也许您正在尝试添加列或其他内容)?
    • @Alexey Mezenin 不,我没有任何使用类别表的表。
    【解决方案3】:

    对我来说,发生此错误是因为 laravel 中的计划任务涉及数据库查找。通过在我的计划任务中注释掉 laravel/app/Console/Kernel.php 中的查找,我能够再次迁移我的数据库。

    【讨论】:

      【解决方案4】:

      这可能是由于以下任何问题造成的:

      • 您的数据库设置不正确。请检查您的数据库 重新设置。
      • 数据库名称不正确。可能是您的代码所在的数据库 试图从中获取表与您提到的数据库不同 在您的数据库配置中。

      【讨论】:

        【解决方案5】:

        我也遇到了同样的问题。我修复了它,首先删除数据库, 然后我手动导入了之前的数据库。

        还好当时我还有以前的数据库备份。

        也许如果你没有以前的数据库备份,你可以将所有的数据库迁移复制到一个新的 laravel 项目中,然后运行 ​​'php artisan migrate' 以获得与以前的数据库相同的数据库,

        【讨论】:

          猜你喜欢
          • 2019-06-09
          • 2016-04-16
          • 2020-03-13
          • 2016-06-21
          • 2018-04-30
          • 1970-01-01
          • 2018-01-25
          • 2023-03-08
          相关资源
          最近更新 更多