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);
执行完成后即可打印所有执行的SQL语句和对应绑定参数:$searchResult = $this->propertyGroupOptionRepository->search($criteria, $context);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
相关产品推荐
相关产品推荐

