Php 如何在配置文件中进行数据库查询?
我正在努力弄清楚如何在Laravel配置文件中进行数据库查询 我目前使用:Php 如何在配置文件中进行数据库查询?,php,laravel,Php,Laravel,我正在努力弄清楚如何在Laravel配置文件中进行数据库查询 我目前使用: <?php // config/database.php $results = \Illuminate\Support\Facades\DB::select( \Illuminate\Support\Facades\DB::raw("select version()") ); $mysql_version = $results[0]->{'version()'}; dd($mysql_version);
<?php
// config/database.php
$results = \Illuminate\Support\Facades\DB::select( \Illuminate\Support\Facades\DB::raw("select version()") );
$mysql_version = $results[0]->{'version()'};
dd($mysql_version);
return [
...
如何确保此查询产生输出并解决此错误
谢谢你的帮助 您有一个原始SQL查询,并且位于配置文件中。在Laravel连接到数据库之前,必须解析配置文件 您可以简单地用纯php连接到数据库并执行查询 在纯php中连接和查询数据库的说明如下:
这应该可以做到。在
config/database.php
文件中保留默认值或空值。创建新的服务提供程序(使用artisan命令或手动)
然后将新的提供者添加到config/app.php
文件中的$providers
数组中
最后,将以下代码添加到boot()
方法中
public function boot()
{
$result= \DB::select('select version() as version')[0];
$this->app['config']->put('database.connections.mysql.version', $result->version);
}
put()
参数中的键可以是您想要的任何键。我尝试了@jfadich的答案,发现它不能完全解决我的问题(laravel 5.4)。我想这可能是由于不同的拉威尔版本,但修改他的指示,我能够得到一些工作。无论如何,如果我的方法有点偏离目标,请让我知道,我会修改我的答案
因此,我在AppServiceProvider中工作,但是您也可以按照前面的建议创建一个新的
行$this->app['config']->put('database.connections.mysql.version',$result->version)代码>给了我一个错误(调用未定义的方法illumb\Config\Repository::put())
我在illumb\Config\Repository文件中进行了一次搜索,以查看它定义了哪些方法,并找到了一个set()
方法,该方法似乎有效。我将文件设置为:
//in AppServiceProvider.php
use Illuminate\Contracts\Config\Repository; //allow setting of app config values
public function boot(Repository $appConfig)
{
$config = CustomConfig::first(); //get the values you want to use
$appConfig->set('configfile.username', $config->demo_username);
$appConfig->set('configfile.account', $config->demo_account);
}
我还遇到了有用的方法all()
,$appConfig->all()
的一个dd提供了一种简单的方法来检查值是否已按预期设置
非常感谢@jfadich让我走上了正确的道路:)在配置文件中保留默认值,然后创建一个服务提供商,在启动Laravel后查询数据库,然后从数据库结果中更新配置值。@Philipp这不起作用,因为我正在修改数据库配置。这是有效的。谢谢:-)在配置加载阶段,您根本不应该连接到数据库。最好是添加一个服务提供商,然后从那里加载版本。理论上这是可行的,但我在安装向导中使用它进行新的安装。因此用户仍在输入数据库信息。安装程序向导。!我希望这个脚本可能会有所帮助:它在一个页面中做了或多或少相同的事情。基于用户输入写入框架配置文件和.htaccess文件。验证数据库凭据并将SQL转储加载到数据库。谢谢,我喜欢这种方式!我发现这个方法在5.4上对我来说不太管用,但我在下面发布了一个修改,似乎可以做到这一点,以防它能帮助任何有类似问题的人:)
php artisan make:provider DatabaseConfigProvider
public function boot()
{
$result= \DB::select('select version() as version')[0];
$this->app['config']->put('database.connections.mysql.version', $result->version);
}
//in AppServiceProvider.php
use Illuminate\Contracts\Config\Repository; //allow setting of app config values
public function boot(Repository $appConfig)
{
$config = CustomConfig::first(); //get the values you want to use
$appConfig->set('configfile.username', $config->demo_username);
$appConfig->set('configfile.account', $config->demo_account);
}