PHP Artisan 抛出奇怪的错误 [42s02]

PHP Artisan throwing strange error [42s02]

我在尝试使用 PHP Artisan 时遇到奇怪的错误。我不知道原因,甚至不知道是哪个文件引起的。

就在几分钟前,我 运行 php artisan migrate:reset 清除了我数据库中的所有 table。工作正常。

然后我对一个与 "stages" table 完全无关的文件进行了更改,当我尝试 运行 php artisan migrate 时,它抛出一条错误消息:

SQLSTATE[42S02]: [Microsoft][SQL Server Native Client 11.0][SQL Server]Invalid object name 'stages'. (SQL: select * from [stages] where [stages].[deleted_at] is null order by [opord] asc)

无论我尝试做什么,它都会抛出该错误,即使只是键入 php artisan 也会导致该致命错误。

此外,如果我手动将名为 "stages" 的 table 添加到数据库,artisan 不会立即失败,它会尝试迁移 table,然后当它到达 table 阶段时失败,它说失败是因为 "stages" 已经存在。

我什至不明白为什么 artisan 在我试图迁移我的 table 时尝试执行 select 语句;而且我特别不明白为什么 运行 单独使用 php artisan 命令时会发生这种情况。

编辑:

我将问题追溯到我添加到 app\Providers\AppServiceProvider

的一些代码
public function boot(){
    View::share('nav_stages', Stage::opord()->get());
}

我发现了一个关于 how to check if a table exists 的 SO 问题,我目前正在努力解决这个问题:

public function boot(){
    if (Schema::hasTable('stages'))
    {
        View::share('nav_stages', Stage::opord()->get());
    }else{
        View::share('nav_stages', null);
    }
}

问题是由我在 AppServiceProvider.php 中的一些代码引起的。在代码中,我试图在数据库中查询整个网站上使用的导航菜单所需的数据(母版页、布局、局部视图等)。

我替换了

public function boot(){
    View::share('nav_stages', Stage::opord()->get());
}

public function boot(){
    if (Schema::hasTable('stages'))
    {
        View::share('nav_stages', Stage::opord()->get());
    }else{
        View::share('nav_stages', null);
    }
}

并添加

use Illuminate\Support\Facades\Schema;

在文件的顶部