设置Illuminate查询生成器 - Uncaught RuntimeException:尚未设置Facade根

时间:2018-05-07 11:40:15

标签: php laravel

我正在尝试设置Illuminate查询构建器,因此我可以运行像" DB :: table(' table') - >其中(...)" ..然而,我无法让它发挥作用。

我通过作曲家下载了Laravel(需要laravel / laravel)。接下来我创建了一个index.php,其中包括composer autoload文件。在那之后,我试图调用一个简单的查询:

\Illuminate\Support\Facades\DB::table('users')->get();

然而它抛出异常"未捕获的RuntimeException:尚未设置外观根。"。我没想到它会马上工作,因为我没有指定数据库连接。但根据这个例外的消息,我并不是很聪明。

我在SO上找到了一个解决方案,在使用查询构建器之前将其放入:

$Capsule = new Capsule;
$Capsule->addConnection(config::get('database'));
$Capsule->setAsGlobal();
$Capsule->bootEloquent();

但是config::get('database')语句也会引发相同的异常。这意味着我可能不得不以某种方式配置配置。

我试图包含Laravel的引导程序并启动它,但它没有改变任何东西。

$app = require_once '\composer\vendor\laravel\laravel\bootstrap\app.php';
$app->boot();

然后我尝试通过以下语句设置Config的外观应用程序:Config::setFacadeApplication($app)之后,当我尝试调用Config :: get(' database')时,它会抛出其他内容例外Uncaught ReflectionException: Class config does not exist

现在我没有想法如何让它发挥作用。我在这里错过了什么?

1 个答案:

答案 0 :(得分:1)

解决方法是扩展Application类并在bootstrap函数中定义config和db实例,如下所示:

use Illuminate\Config\Repository;
use Illuminate\Database\Connectors\ConnectionFactory;
use Illuminate\Database\DatabaseManager;
use Illuminate\Foundation\Application;

class LaravelApp extends Application
{

    function boot()
    {
        parent::boot();

        $this->instance('config', new Repository(['database' => $this->getDBCfg()]));
        $this->instance('db', new DatabaseManager($this, new ConnectionFactory($this)));
    }

    private function getDBCfg(){
        return [

            'default' => env('DB_CONNECTION', 'mysql'),

            'connections' => [

                'mysql' => [
                    'driver' => 'mysql',
                    'host' => env('DB_HOST', 'localhost'),
                    'port' => env('DB_PORT', '3306'),
                    'database' => env('DB_DATABASE', 'test'),
                    'username' => env('DB_USERNAME', 'root'),
                    'password' => env('DB_PASSWORD', ''),
                    'unix_socket' => env('DB_SOCKET', ''),
                    'charset' => 'utf8mb4',
                    'collation' => 'utf8mb4_unicode_ci',
                    'prefix' => '',
                    'strict' => true,
                    'engine' => null,
                ],

            ],

        ];
    }
}

客户端代码如下所示:

$laravelApp = new LaravelApp(__DIR__);
$laravelApp->boot();
Config::setFacadeApplication($laravelApp);
var_dump(\Illuminate\Support\Facades\DB::table('test')->get());

感谢您在评论中提供帮助