pdu*_*ler 10 mysql typo3 typo3-6.2.x typo3-7.6.x
$query = $this->createQuery();
return $query->matching($query->like('linker', "$linkerKey=$linkerValue"))
->setOrderings(array('crdate' => $ordering))
->execute();
Run Code Online (Sandbox Code Playgroud)
我怎样才能在extbase中调试这样生成的查询?当再次创建相同的查询(但没有execute())并尝试使用var_dump或内部t3lib_div :: debug显示它时,我只会收到一个空白页面.
pga*_*mpe 21
在版本8.7 LTS中,需要采取另一种方式:
$queryParser = $this->objectManager->get(\TYPO3\CMS\Extbase\Persistence\Generic\Storage\Typo3DbQueryParser::class);
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($queryParser->convertQueryToDoctrineQueryBuilder($query)->getSQL());
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($queryParser->convertQueryToDoctrineQueryBuilder($query)->getParameters());
Run Code Online (Sandbox Code Playgroud)
此信息已过时并在TYPO3 8.7中弃用.有关调试extbase查询的更新方法,请参阅下面的@pgampe的答案.
Extbase现在有一个QueryParser.在您的存储库方法中,在返回执行的查询之前,插入:
$parser = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Storage\\Typo3DbQueryParser');
$queryParts = $parser->parseQuery($query);
\TYPO3\CMS\Core\Utility\DebugUtility::debug($queryParts, 'query');
Run Code Online (Sandbox Code Playgroud)
结果是查询部分的表视图,由SQL关键字拆分,例如:

请记住,您的Repository返回的QueryResult可能仍然与SQL查询结果不同.Extbase使用PropertyMapper尝试将每个结果行转换为ExtbaseObject.如果PropertyMapper配置错误或该行包含根据配置无法转换为数据类型的数据,则将默默跳过这些对象.
$query = $this->createQuery();
$result = $query->matching($query->like('linker', "$linkerKey=$linkerValue"))
->setOrderings(array('crdate' => $ordering))
->execute();
$GLOBALS['TYPO3_DB']->debugOutput = true;
return $result;
Run Code Online (Sandbox Code Playgroud)
对extbase的这种破解很脏,但很有用:
在typo3/sysext/extbase/Classes/Persistence/Storage/Typo3DbBackend.php中,在return语句之前编辑方法buildQuery(array $ sql),添加:
t3lib_div::debug($statement, 'SQL Query Extbase');
Run Code Online (Sandbox Code Playgroud)
使用后删除,不要忘记这将影响在extbase上运行的所有内容,因此仅在开发环境中使用
资料来源:http://sancer-media.net/2011/extbase-schneller-mysql-debug.html
| 归档时间: |
|
| 查看次数: |
21048 次 |
| 最近记录: |