Я пытаюсь настроить свой запрос, используя поле сравнения в репозитории TYPO3, и не совсем понимаю. Кто-нибудь знает, как правильно отладить это? Я использую CMS TYPO3 8.x. (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 написал запись в другой теме, объясняющую, что нам просто нужно включить ошибки sql в TYPO3 и ввести ошибочное значение в запросе, чтобы вывести ошибку sql. Это сработает, но сообщение об ошибке не распространяется на поле, которое я пытаюсь сравнить. Так что я был бы очень рад, если бы с.б. поможет мне выбраться из этой беды.
Отладка старой школы больше не работает в 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, но не нашел подходящего решения. - Для меня это не работает: Как сравнить DateTime в репозитории Extbase - я не получу свой запрос с этим: Как отлаживать запрос в extbase? - также не делал этого: Extbase - получить созданный sql из запроса
tx_my_domain_model_event
.* FROMtx_my_domain_model_event
tx_my_domain_model_event
WHERE (tx_my_domain_model_event
.startdate
› :dcValue1) AND (tx_my_domain_model_event
.sys_language_uid
IN (0, -1)) И (tx_my_domain_model_event
.pid
IN (10, 11, 12, 13, 17, 19, 20, 26)) И... поэтому сравнение даты и времени выполняется против: dcValue1 - person Jøran   schedule 04.05.2017