Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在配置文件中进行数据库查询?_Php_Laravel - Fatal编程技术网

Php 如何在配置文件中进行数据库查询?

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);

我正在努力弄清楚如何在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);

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);
}