think-orm在webman2.1使用mongo数据库bug

问题描述

think-orm在webman2.1使用mongo数据库出现TypeError: think\db\connector\Mongo::query()

程序代码

TypeError: think\db\connector\Mongo::query(): Argument #1 ($query) must be of type MongoDB\Driver\Query, string given, called in /www/wwwroot/shu_cang/vendor/webman/think-orm/src/DbManager.php on line 54 and defined in /www/wwwroot/shu_cang/vendor/topthink/think-orm/src/db/connector/Mongo.php:298
Stack trace:
#0 /www/wwwroot/shu_cang/vendor/webman/think-orm/src/DbManager.php(54): think\db\connector\Mongo->query()
#1 /www/wwwroot/shu_cang/vendor/workerman/coroutine/src/Pool.php(328): Webman\ThinkOrm\DbManager->Webman\ThinkOrm\{closure}()
#2 /www/wwwroot/shu_cang/vendor/workerman/coroutine/src/Pool.php(312): Workerman\Coroutine\Pool->trySendHeartbeat()
#3 /www/wwwroot/shu_cang/vendor/workerman/coroutine/src/Pool.php(132): Workerman\Coroutine\Pool->checkConnections()
#4 /www/wwwroot/shu_cang/vendor/w

报错信息

截图

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

截图

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

Workerman/5.1.1 PHP/8.2.27 (Jit off) Linux/6.1.0-31-amd64

147 2 0
2个回答

随心所欲

先修改代码使用,等后续更新webman/think-orm。

$pool->setHeartbeatChecker(function ($connection) {
    if (in_array($connection->getDriverName(), ['mysql', 'pgsql', 'sqlite', 'sqlsrv'])) {
        $connection->select('select 1');
    } elseif ($connection->getDriverName() === 'mongodb') {
        $connection->command(['ping' => 1]);
    }
});

感谢反馈,发布了 2.1.2 版本,更新下

  • 橘子味的心 5天前

    好的

  • 橘子味的心 5天前

    代码需要改为以下
    if ($connection->getConfig('type') === 'mongo') {
    $command = new \MongoDB\Driver\Command(['ping' => 1]);
    $connection->command($command);
    return;
    }
    $connection->query('select 1');

  • walkor 5天前

    更新到 2.1.3

×
🔝