【发布时间】:2017-04-22 09:37:51
【问题描述】:
我正在尝试使用 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 错误。这会起作用,但错误消息不会持续到我尝试比较的字段。所以如果 s.b. 我会很高兴。会帮助我摆脱这种痛苦。
老式的调试在 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,但没有找到合适的解决方案。 - 对我来说,这个不起作用: How to compare DateTime in Extbase repository - 这个我不会得到我的查询:How to debug a query in extbase? - 这也没有:Extbase - get created sql from query
【问题讨论】:
-
您找到解决方案了吗?我被困在同一点上。从 SQLLogger 获得调试信息,但似乎preparedStatement 占位符未填写日期时间: SELECT
tx_my_domain_model_event.* FROMtx_my_domain_model_eventtx_my_domain_model_eventWHERE (tx_my_domain_model_event.startdate> :dcValue1) AND (@ 987654332@.sys_language_uidIN (0, -1)) AND (tx_my_domain_model_event.pidIN (10, 11, 12, 13, 17, 19, 20, 26)) AND ... 所以日期时间比较反对:dcValue1
标签: datetime typo3 extbase typo3-7.6.x typo3-8.x