Process 使用Db后无法启动

qq7467466

问题描述

需求是需要动态的读取数据库的配置,然后启动多个process, 目前使用DB查询方法导致报错, 如果无法用DB方法查询的话, 那这些参数应该如何动态读取呢?

程序代码

use support\Db;

$group_ids = Db::table('apps')->limit('10')->pluck('app_uid')->toArray();
var_dump($group_ids);

$group_ids = [
    "tw_phonecollect" => 3,
    "t15_login"       => 3,
    "data-report"     => 3,
    "program_login"   => 3,
    "qa_platform"     => 3,
    "192.168.33.250"  => 3,
];

foreach ($group_ids as $group_id => $count) {
    $process[$group_id] = [
        'handler' => \app\queue\kafka\Events::class,
        'count'   => $count, // 进程数
        'user'    => $group_id,
        'group'   => $group_id,
    ];
}

return $process;

报错信息

Fatal error: Uncaught Error: Call to a member function connection() on null in D:\phpstudy_pro\WWW\cloudEvent\vendor\illuminate\database\Capsule\Manager.php:87
Stack trace:
#0 D:\phpstudy_pro\WWW\cloudEvent\config\plugin\ycgame\cloud-event\process.php(13): Illuminate\Database\Capsule\Manager::table('apps')
#1 D:\phpstudy_pro\WWW\cloudEvent\vendor\workerman\webman-framework\src\Config.php(207): include('D:\\phpstudy_pro...')
#2 D:\phpstudy_pro\WWW\cloudEvent\vendor\workerman\webman-framework\src\Config.php(63): Webman\Config::loadFromDir('D:\\phpstudy_pro...', Array)
#3 D:\phpstudy_pro\WWW\cloudEvent\vendor\workerman\webman-framework\src\support\App.php(141): Webman\Config::load('D:\\phpstudy_pro...', Array)
#4 D:\phpstudy_pro\WWW\cloudEvent\vendor\workerman\webman-framework\src\support\App.php(37): support\App::loadAllConfig(Array)
#5 D:\phpstudy_pro\WWW\cloudEvent\start.php(4): support\App::run()
#6 {main}
  thrown in D:\phpstudy_pro\WWW\cloudEvent\vendor\illuminate\database\Capsule\Manager.php on line 87

截图报错信息里报错文件相关代码

截图

操作系统及workerman/webman等框架组件具体版本

workerman/webman-framework: 1.5.6
illuminate/database: 8.83.27

352 2 0
2个回答

tanhongbin

Db 没有 toArray() 方法 你应该在前面使用(array)Db::table('')->...

  • 暂无评论
walkor

无法在配置里使用框架自带的数据库组件,因为读取配置的这个时候进程还没开始创建,很多配置还没有载入,大部分组件都没有初始化包括数据库。
要做到你说的效果需要自己手动初始化数据库,建议用原生pdo去连,用完释放pdo对象。切记不要在配置里提前初始化数据组件,会导致所有业务进程共享数据库连接,导致一些问题。

🔝