我想从我的typo3扩展中获得一些数据库表。扩展是基于extbase的。
查询总是什么都不返回,只有数据存在。
我试过这个:
$query = $this->createQuery();
$query->statement('SELECT * FROM `my_table`
WHERE field = ? ORDER BY date DESC LIMIT 1',
array($condition));
$results = $query->execute();这是:
$query = $this->createQuery();
$query->matching($query->equals('field', $condition));
$query->setOrderings(array('date' => Tx_Extbase_Persistence_QueryInterface::ORDER_DESCENDING));
$query->setLimit(1);
$results = $query->execute();两者都返回null作为结果。
是否有可能获得类创建的sql以查看bug所在的位置?
我查看了一些扩展的持久化类,但没有找到任何线索。
编辑:对于那些有兴趣的人。我找到了一个“解决方案”。
如果使用语句()方法创建查询,则可以使用此函数打印查询
echo $query->getStatement()->getStatement();它不能取代占位符。但是您可以使用此方法获得变量。
var_dump($query->getStatement()->getBoundVariables());这是我找到的最好的解决方案,无需编辑extbase扩展。
发布于 2012-10-26 10:37:06
检查这个片段,虽然它在使用中不太舒服,但它有很大帮助:
通常,您需要在buildQuery(array $sql)方法(*)的末尾-就在return $statement;前面的代码
if (in_array("your_table_name", $sql['tables'])) {
var_dump($statement);
print_r($statement);
}(*)类别档案:
typo3/sysext/extbase/Classes/Persistence/Storage/Typo3DbBackend.phptypo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php6.2.x ..。
您可以在\TYPO3\CMS\Core\Database\DatabaseConnection::exec_SELECTquery方法中尝试,只需在获取$query之后添加条件,比如(trim很重要!):
public function exec_SELECTquery($select_fields, $from_table, $where_clause, $groupBy = '', $orderBy = '', $limit = '') {
$query = $this->SELECTquery($select_fields, $from_table, $where_clause, $groupBy, $orderBy, $limit);
if (trim($from_table) == 'fe_users') {
DebuggerUtility::var_dump($query);
}
// rest of method发布于 2014-10-14 19:23:10
在TYPO3 6.2中,可以使用Extbase DebuggerUtility调试查询。
在$query->execute()之前添加以下代码:
$queryParser = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Storage\\Typo3DbQueryParser');
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($queryParser->parseQuery($query));对于TYPO3 8.7+,请使用以下代码:
$queryParser = \TYPO3\CMS\Core\Utility\GeneralUtilityGeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Persistence\Generic\Storage\Typo3DbQueryParser::class);
$doctrineQueryBuilder = $queryParser->convertQueryToDoctrineQueryBuilder($query);
$doctrineQueryBuilderSQL = $doctrineQueryBuilder->getSQL();
$doctrineQueryBuilderParameters = $doctrineQueryBuilder->getParameters();发布于 2014-11-08 12:41:36
一个简单的方法是使用php“Typo3 ()”方法,而无需更改任何核心代码,也不会在任何论坛中提到:
$result = $query->execute();
echo (serialize($result));在结果对象中,可以找到SQL查询(“语句;”.)
https://stackoverflow.com/questions/13084863
复制相似问题