ReflectionException:类db不存在

时间:2017-06-06 14:14:38

标签: laravel

我正在创建一个使用\Illuminate\Support\Facades\DB来引用数据库的库。我在调用DB::table()->where()->get()时遇到以下异常:" ReflectionException:类db不存在。"问题是什么,我需要做些什么才能克服它?

我知道有一个使用\Illuminate\Database\Capsule\Manager建立与数据库连接的进程。但我还没有找到关于如何使用\Illuminate\Support\Facades\DB进行此操作的任何示例。

代码示例:

use \Illuminate\Support\Facades\DB;

abstract class Data
{
    public static function tables($prefix, $mode=null)
    {
        $outbound = array();
        $tables = DB::table('information_schema.tables')->where('TABLE_NAME', 'LIKE', $prefix.'_%')->get();
        foreach ($tables as $table) {
            ...
        }
        return $outbound;
    }
}

堆栈追踪:

~/vendor/laravel/framework/src/Illuminate/Container/Container.php:749
~/vendor/laravel/framework/src/Illuminate/Container/Container.php:644
~/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:709
~/vendor/laravel/framework/src/Illuminate/Container/Container.php:1203
~/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:175
~/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:144
~/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:231
~/Data.php:XXX

4 个答案:

答案 0 :(得分:1)

因为它是一个外观,所以将它添加到类的顶部以使其工作:

Convert.ToBase64String();

或使用完整命名空间:

use DB;

答案 1 :(得分:0)

这不是正确的方法,但你可以这样写。给' /'在DB之前

$ tables = \ DB :: table(' information_schema.tables') - > where(' TABLE_NAME',' LIKE',$ prefix。& #39; _%') - >得到()

答案 2 :(得分:0)

TL; DR:

暂时用DB::注释行并添加https://stackoverflow.com/a/39354471/729077应该可以帮助您找出真正的原因。

更长的解释:

一个原因可能与该线程中列出的原因类似:Uncaught ReflectionException: Class log does not exist Laravel 5.2,唯一的区别是缺少了db类而不是log类。

这似乎取决于哪个类出现首先发生在代码中-在您自己的代码中,它是DB,而通常是Log门面触发错误。

对我来说,原因是缺少第三方软件包,其服务提供商已添加到config/app.php中的列表中。结果,每个技术人员命令都会吐Call to undefined method Illuminate\Support\Facades\DB::connection()错误。在将明显的use Illuminate\Support\Facades\DB添加到有问题的文件顶部之后,该错误更改为您的错误(class db does not exist)。

我已经添加了https://stackoverflow.com/a/39354471/729077中的代码,然后用DB::connection()注释了这一行,而工匠展示了真正的罪魁祸首。 composer require丢失包裹后,laravel重新开始工作。

答案 3 :(得分:0)

如果其他人在运行phpunit测试时得到了此提示,则可以通过扩展Tests\TestCase而不是PHPUnit\Framework\TestCase来解决此问题