我正在尝试使用 TYPO3 存储库中的比较字段来调整我的查询,但并没有真正弄清楚。有人知道如何正确调试吗?我正在使用 TYPO3 8.x CMS。(准确地说是8.4)
<?php
public function findActiveProducts() {
$query = $this->createQuery();
$constraints = array();
$date = new \DateTime(midnight);
// $date = new \DateTime(); // i tried to use the precise time to compare
$today = $date->format('Y-m-d H:i:s');
// $today = $date->format('Y-m-d'); // 1st try (the field value in db)
// $today = $date->getTimestamp(); // 2nd try (the type in the modal
$constraints[] = $query->lessThanOrEqual('entrydate', $today);
$constraints[] = $query->equals('deleted', 0, false);
->matching(
$query->logicalAnd($constraints)
)
->setLimit(10)
->setOrderings(array(
'entrydate' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING
)
);
// Some debug's to find out more. sadly didn't work
\TYPO3\CMS\Core\Utility\DebugUtility::debug( $today , 'today value');
\TYPO3\CMS\Core\Utility\DebugUtility::debug( $query, 'my query');
\TYPO3\CMS\Core\Utility\DebugUtility::debug( $constraints, 'constraints');
$result = $query->execute();
?>
所以:有没有人有一个很好的建议如何调试这个?stackoverflow 上的一个人在另一个主题中写了一个条目,解释说我们只需要在 TYPO3 中打开 sql 错误并在查询中输入错误的值即可输出 sql 错误。这会起作用,但错误消息不会持续到我尝试比较的字段。因此,如果某人能帮助我摆脱这种痛苦,我将非常高兴。
oldschool 调试在 8.x 中不再起作用,否则这没什么大不了的。
<?php
$parser = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Storage\\Typo3DbQueryParser');
$parser->convertQueryToDoctrineQueryBuilder($query);
$queryParts = $parser->parseQuery($query);
\TYPO3\CMS\Core\Utility\DebugUtility::debug($queryParts, 'Query');
?>
顺便说一句,模型......在我使用它的所有部分都可以正常工作,除了存储库中的自定义查询。
/**
* entrydate
*
* @var \DateTime
*/
protected $entrydate = null;
我也搜索了stackoverflow,但没有找到合适的解决方案。- 对我来说,这个不起作用: 如何比较 Extbase 存储库中的 DateTime - 我不会用这个得到我的查询:如何在 extbase 中调试查询? - 这也没有:Extbase - 从查询中获取创建的 sql