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

时间:2015-08-03 18:24:57

标签: php laravel artisan

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

就在不久之前,我运行php artisan migrate:reset来清除我的数据库中的所有表。工作得很好。

然后我对一个与“阶段”表完全无关的文件进行了更改,当我尝试运行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也会导致致命错误。

另外,如果我手动将一个名为“阶段”的表添加到数据库中,工匠不会立即失败,它会尝试迁移表,然后当它到达阶段表时失败,并且它表示失败,因为“阶段“已经存在。

我甚至不明白为什么当我只是试图迁移我的桌子时,工匠正试图执行一个选择语句;我特别不明白为什么单独运行php artisan命令时会发生这种情况。

编辑:

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

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

我发现了一个关于how to check if a table exists的问题,我正在努力做到这一点:

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

1 个答案:

答案 0 :(得分:0)

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

我替换了

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;

位于文件顶部