设置 Illuminate 查询生成器 - 未捕获的运行时异常:尚未设置外观根目录



我正在尝试设置Illuminate查询生成器,因此我可以运行诸如"DB::table('table')->where(...)"之类的查询,但是我无法让它工作。

我通过作曲家下载了Laravel(需要laravel/laravel)。接下来,我创建了一个索引.php,其中包括作曲家自动加载文件。之后,我尝试调用一个简单的查询:

IlluminateSupportFacadesDB::table('users')->get();

但是,它会引发异常"未捕获的运行时异常:尚未设置外观根目录"。我没想到它会立即工作,因为我没有指定数据库连接。但基于这个例外的信息,我并不聪明。

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

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

但是,config::get('database')语句也抛出相同的异常。这意味着我可能也必须以某种方式配置配置。

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

$app = require_once 'composervendorlaravellaravelbootstrapapp.php';
$app->boot();

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

现在我不知道如何让它工作。我在这里错过了什么?

通过扩展应用程序类并在引导函数中定义配置和数据库实例来解决,如下所示:

use IlluminateConfigRepository;
use IlluminateDatabaseConnectorsConnectionFactory;
use IlluminateDatabaseDatabaseManager;
use IlluminateFoundationApplication;
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(IlluminateSupportFacadesDB::table('test')->get());

感谢您在评论中的帮助

最新更新