无法启动 Laravel,出现 "Base table or view not found" 错误
Can't start Laravel, I get "Base table or view not found" error
首先我错误地回滚了 2 个迁移,然后我 运行 php artisan migrate
命令,我得到了以下错误:
[Illuminate\Database\QueryException]
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'exercise1.categories' 不存在 (SQL: select * 来自
<code>categories
其中 parent_id
= 0)
[PDO异常]
SQLSTATE[42S02]:未找到基础 table 或视图:1146 Table 'exercise1.categories' 不存在
然后我停了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');
}
}
请帮我解决这个令人沮丧的问题。非常感谢所有答案,提前致谢。
回滚这些迁移后,您就删除了 categories
和 articles
表。所以只需再次 运行 migrate
命令:
php artisan migrate
这可能是由于以下任一问题造成的:
- 您的数据库设置不正确。请检查您的数据库
再次设置。
- 数据库名称不正确。可能是您的代码所在的数据库
试图从中获取表与您提到的数据库不同
在您的数据库配置中。
如果您遇到此问题并且不是由迁移文件引起,那么很可能是由于 2 个可能的原因。
- 检查 ServiceProviders' 引导功能,如果它包含正在查询 table 不存在的查询。
- 检查您是否创建了 自定义辅助函数 并在 composer.json 文件中自动加载了该辅助函数。如果自定义辅助函数包含正在查询 table 不存在的查询,则会导致此错误。
由于 ServiceProvider 的引导函数和自动加载的自定义辅助函数在 laravel 启动时首先加载,所有 php artisan
命令将生成“Base table 或未找到视图”错误。
此时您应该做的是注释掉那些查询不存在的 table 和 运行 php artisan serve
然后 运行 php artisan migrate
的查询。然后取消注释这些行,保存它,一切都会正常工作。
正如@devk 所建议的那样,最好检查 laravel 日志文件,它可以准确指出问题发生的位置。它让我找到了解决方案。
为此不要忘记
对我而言,此错误的发生是因为 laravel 中的 计划任务 涉及数据库查找。通过在我的计划任务中注释掉 laravel/app/Console/Kernel.php
中的查找,我能够再次迁移我的数据库。
我也遇到了同样的问题。我修复了它,首先删除了数据库,
然后我手动导入了之前的数据库。
还好当时我还有之前的数据库备份。
也许如果您没有以前的数据库备份,您可以将所有数据库迁移复制到一个新的 laravel 项目,然后 运行 'php artisan migrate' 获得相同的数据库以前的数据库,
首先我错误地回滚了 2 个迁移,然后我 运行 php artisan migrate
命令,我得到了以下错误:
[Illuminate\Database\QueryException]
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'exercise1.categories' 不存在 (SQL: select * 来自
<code>categories
其中 parent_id
= 0)
[PDO异常]
SQLSTATE[42S02]:未找到基础 table 或视图:1146 Table 'exercise1.categories' 不存在
然后我停了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');
}
}
请帮我解决这个令人沮丧的问题。非常感谢所有答案,提前致谢。
回滚这些迁移后,您就删除了 categories
和 articles
表。所以只需再次 运行 migrate
命令:
php artisan migrate
这可能是由于以下任一问题造成的:
- 您的数据库设置不正确。请检查您的数据库 再次设置。
- 数据库名称不正确。可能是您的代码所在的数据库 试图从中获取表与您提到的数据库不同 在您的数据库配置中。
如果您遇到此问题并且不是由迁移文件引起,那么很可能是由于 2 个可能的原因。
- 检查 ServiceProviders' 引导功能,如果它包含正在查询 table 不存在的查询。
- 检查您是否创建了 自定义辅助函数 并在 composer.json 文件中自动加载了该辅助函数。如果自定义辅助函数包含正在查询 table 不存在的查询,则会导致此错误。
由于 ServiceProvider 的引导函数和自动加载的自定义辅助函数在 laravel 启动时首先加载,所有 php artisan
命令将生成“Base table 或未找到视图”错误。
此时您应该做的是注释掉那些查询不存在的 table 和 运行 php artisan serve
然后 运行 php artisan migrate
的查询。然后取消注释这些行,保存它,一切都会正常工作。
正如@devk 所建议的那样,最好检查 laravel 日志文件,它可以准确指出问题发生的位置。它让我找到了解决方案。
为此不要忘记
对我而言,此错误的发生是因为 laravel 中的 计划任务 涉及数据库查找。通过在我的计划任务中注释掉 laravel/app/Console/Kernel.php
中的查找,我能够再次迁移我的数据库。
我也遇到了同样的问题。我修复了它,首先删除了数据库, 然后我手动导入了之前的数据库。
还好当时我还有之前的数据库备份。
也许如果您没有以前的数据库备份,您可以将所有数据库迁移复制到一个新的 laravel 项目,然后 运行 'php artisan migrate' 获得相同的数据库以前的数据库,