[TYPO3-mvc] How to make a join inside a Query object

Franz Koch typo3.RemoveForMessage at elements-net.de
Fri Jan 8 20:55:44 CET 2010


Hi Michael,

> thanks for your answer... will have a look at it tomorrow and go to 
> sleep now!

how did you solve your problem? I'm currently stuck in the same situation as you, but having to use two joins. After hours trying to find a extbase-way using native functionality (following Jochens hint and started experimenting), I for now came to the conclusion to simply use a TYPO3_DB call and map the results myself. My temporary solution now looks like this:

public function findByStore(Tx_EbWebcatalog_Domain_Model_Store $store) {
	$result = NULL;
	$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
		'*',
		'tx_ebdatamodel_domain_model_medium
			LEFT JOIN tx_ebdatamodel_domain_model_compilation ON tx_ebdatamodel_domain_model_compilation.advertising_medium = tx_ebdatamodel_domain_model_medium.uid
			LEFT JOIN tx_ebdatamodel_store_compilation_mm ON tx_ebdatamodel_store_compilation_mm.uid_foreign = tx_ebdatamodel_domain_model_compilation.uid',
		'tx_ebdatamodel_store_compilation_mm.uid_local = '.$store->getUid().
			' AND tx_ebdatamodel_domain_model_medium.media_type = '.$this->mediaType.
			$GLOBALS['TSFE']->cObj->enableFields('tx_ebdatamodel_domain_model_medium').
			$GLOBALS['TSFE']->cObj->enableFields('tx_ebdatamodel_domain_model_compilation'),
		'tx_ebdatamodel_domain_model_medium.uid',
		'tx_ebdatamodel_domain_model_medium.year DESC, tx_ebdatamodel_domain_model_medium.title DESC');

	if($res) {
		$rowIterator = t3lib_div::makeInstance('Tx_Extbase_Persistence_RowIterator');
		while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
			$rowIterator->append(t3lib_div::makeInstance('Tx_Extbase_Persistence_Row',$row));
		}
		$GLOBALS['TYPO3_DB']->sql_free_result($res);
		
		$dataMapper = Tx_Extbase_Dispatcher::getPersistenceManager()->getBackend()->getDataMapper();
		$result = $dataMapper->map($this->objectType,$rowIterator);
	}
	return $result;
}

Not nice messing with extbase core stuff, but it works. And as I don't care for persistence in this case (which probably even should work), I can live with it for now. But I'm always open to suggestions how to create such a query with extbase features. I already was thinking about extending the Query model of extbase with a join method but finally gave up.

-- 
kind regards,
Franz Koch


More information about the TYPO3-project-typo3v4mvc mailing list