【问题标题】:Eloquent query in custom config file (/config) Laravel 5自定义配置文件 (/config) Laravel 5 中的雄辩查询
【发布时间】:2015-05-26 01:07:01
【问题描述】:

尝试在自定义配置文件中触发以下 Eloquent 查询,该文件位于:/config Laravel 5 中的目录:

'array_name' =>(App\MyApp\Models\ModelName::lists('column_name', 'column_name')),

得到以下错误:

致命错误:在第 3132 行的 /path/to/the/project/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php 中的非对象上调用成员函数 connection()

【问题讨论】:

  • 您在 Model.php 的第 3132 行看到了什么?我的 Laravel 版本有不同版本的代码。错误本身意味着那里的某些对象为空。可能是 Laravel 在解析配置文件时没有正确初始化自己。
  • 是的,你是绝对正确的,但他们有什么办法在 laravel 5 中,在自定义配置文件中触发一个雄辩的查询?因为在 laravel 4.3 中,在自定义配置文件中触发一个 eloquent 查询非常容易
  • 配置文件不是查询数据库的地方。例如,在服务提供商处工作。
  • @Jarek Tkaczyk 如何在提供者中使用查询并在配置中调用它?

标签: laravel eloquent laravel-5


【解决方案1】:

依赖于数据库的配置文件必须延迟加载。只需将它们放在config 文件夹旁边的新config.lazy 文件夹中,然后在您的app/Providers/COnfigServiceProvider.php 中添加以下方法

public function boot()
{
    $envConfigPath = config_path() . '/../config.lazy';
    $config = app('config');
    foreach (\Symfony\Component\Finder\Finder::create()->files()->name('*.php')->in($envConfigPath) as $file)
    {
        $key_name = basename($file->getRealPath(), '.php');
        $old_values = $config->get($key_name) ?: [];
        $new_values = require $file->getRealPath();
        $config->set($key_name, array_replace_recursive($old_values, $new_values));
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 2021-07-23
    • 2021-11-09
    • 2017-11-11
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多