You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shopware 6中PHPUnit测试场景如何打印存储库搜索的SQL查询调试?

Shopware 6 PHPUnit测试环境导出SQL查询方案
  • 方法一:捕获实际执行的SQL(推荐)
    在你的查询代码前添加如下代码,开启临时SQL日志:
    /** @var \Doctrine\DBAL\Connection $connection */
    $connection = $this->getContainer()->get('Doctrine\DBAL\Connection');
    $debugStack = new \Doctrine\DBAL\Logging\DebugStack();
    $connection->getConfiguration()->setSQLLogger($debugStack);
    
    执行你原本的查询代码:
    $searchResult = $this->propertyGroupOptionRepository->search($criteria, $context);
    
    执行完成后即可打印所有执行的SQL语句和对应绑定参数:
    foreach ($debugStack->queries as $query) {
        // 输出SQL语句
        var_dump($query['sql']);
        // 输出对应绑定参数
        var_dump($query['params']);
    }
    
  • 方法二:直接通过Criteria解析生成SQL
    如果你只需要获取当前查询条件对应的SQL,不需要捕获所有执行的SQL,可以直接用DAL自带的SQL解析器生成:
    $parser = $this->getContainer()->get(\Shopware\Core\Framework\DataAbstractionLayer\Search\Api\SqlSearchParser::class);
    $sql = $parser->parse($criteria, $this->propertyGroupOptionRepository->getDefinition(), $context->getContext());
    var_dump($sql);
    

注意:第二种方法仅适用于简单查询场景,如果你的查询包含关联预加载、聚合统计、复杂字段过滤等逻辑,生成的SQL可能和实际执行的SQL存在差异,优先使用第一种方案捕获真实执行的SQL。PHPUnit每运行完一个测试用例都会自动重置容器,无需手动还原SQL日志配置,不会影响其他用例的执行。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 13:45:00