需求是需要动态的读取数据库的配置,然后启动多个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-framework: 1.5.6
illuminate/database: 8.83.27
Db 没有 toArray() 方法 你应该在前面使用(array)Db::table('')->...
无法在配置里使用框架自带的数据库组件,因为读取配置的这个时候进程还没开始创建,很多配置还没有载入,大部分组件都没有初始化包括数据库。
要做到你说的效果需要自己手动初始化数据库,建议用原生pdo去连,用完释放pdo对象。切记不要在配置里提前初始化数据组件,会导致所有业务进程共享数据库连接,导致一些问题。
Mark, 感谢大佬的回复!