我試圖調整我的查詢,使用TYPO3存儲庫中的比較字段,並沒有真正弄清楚它。任何人都知道如何正確調試這個? 我正在使用TYPO3 8.x CMS。 (準確的說是8.4)TYPO3 8.x在CustomRepository中比較DateTime(查詢,約束)
<?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.會幫助我擺脫這種痛苦。
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,但沒有找到合適的解決方案。 - 對我來說,這一個不工作: How to compare DateTime in Extbase repository - 我不會讓我的查詢與這一個:How to debug a query in extbase? - 也沒有這樣的:Extbase - get created sql from query
你找到一個辦法?我被困在同一點。從SQLLogger獲得調試信息,但看起來,prepareStatement佔位符未填寫日期時間:SELECT'tx_my_domain_model_event'。* FROM'tx_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))AND('tx_my_domain_model_event'.'pid' IN(10,11,12,13,17,19,20,26))AND ... so日期時間比較是針對:dcValue1 –