/** * Translates a query an manipulates given query object * * @param Tx_PtExtlist_Domain_QueryObject_Criteria $criteria Criteria to be translated * @param \TYPO3\CMS\Extbase\Persistence\Generic\Query $extbaseQuery Query to add criteria to * @param \TYPO3\CMS\Extbase\Persistence\Repository $extbaseRepository Associated repository * @return \TYPO3\CMS\Extbase\Persistence\Generic\Query */ public static function translateCriteria(Tx_PtExtlist_Domain_QueryObject_Criteria $criteria, \TYPO3\CMS\Extbase\Persistence\Generic\Query $extbaseQuery, \TYPO3\CMS\Extbase\Persistence\Repository $extbaseRepository) { /** * This is a little ugly here: * * As we do not create Extbase criterias from our generic pt_extlist criterias * but set the criterias directly on the created extbase query, we have to cheat * here and generate two helper queries, whenever a AND query has to be translated. * * After having translated the two criterias of the generic AND criteria, we * put them together again in a single extbase query. */ $tmpQuery1 = $extbaseRepository->createQuery(); $tmpQuery2 = $extbaseRepository->createQuery(); // translate first AND criteria by creating a new extbase query $tmpQuery1 = Tx_PtExtlist_Domain_DataBackend_ExtBaseDataBackend_ExtBaseInterpreter_ExtBaseInterpreter::setCriteriaOnExtBaseQueryByCriteria($criteria->getFirstCriteria(), $tmpQuery1, $extbaseRepository); // translate second AND criteria by creating a new extbase query $tmpQuery2 = Tx_PtExtlist_Domain_DataBackend_ExtBaseDataBackend_ExtBaseInterpreter_ExtBaseInterpreter::setCriteriaOnExtBaseQueryByCriteria($criteria->getSecondCriteria(), $tmpQuery2, $extbaseRepository); // put both translated criterias together again in a single extbase query if ($extbaseQuery->getConstraint()) { $extbaseQuery->matching($extbaseQuery->logicalAnd($extbaseQuery->getConstraint(), $extbaseQuery->logicalAnd($tmpQuery1->getConstraint(), $tmpQuery2->getConstraint()))); } else { $extbaseQuery->matching($extbaseQuery->logicalAnd($tmpQuery1->getConstraint(), $tmpQuery2->getConstraint())); } return $extbaseQuery; }
/** * return translated criteria string * @param \Tx_PtExtlist_Domain_QueryObject_AndCriteria|\Tx_PtExtlist_Domain_QueryObject_Criteria $criteria Tx_PtExtlist_Domain_QueryObject_AndCriteria * @return string */ public static function translateCriteria(Tx_PtExtlist_Domain_QueryObject_Criteria $criteria) { $andCriteriaString = '(' . Tx_PtExtlist_Domain_DataBackend_MySqlDataBackend_MySqlInterpreter_MySqlInterpreter::translateCriteria($criteria->getFirstCriteria()); $andCriteriaString .= ') AND ('; $andCriteriaString .= Tx_PtExtlist_Domain_DataBackend_MySqlDataBackend_MySqlInterpreter_MySqlInterpreter::translateCriteria($criteria->getSecondCriteria()) . ')'; return $andCriteriaString; }