Hallo Typo3 Fans,
ich bin gerade dabei eine Extension auf Basis von Extbase zu bauen. Es kommt eine MM-Relation vor. Doch genau hier ist das Problem.
Zur Erläuterung:
Produkte können einer oder mehreren Kategorien zugeordnet werden.
Folgende Tabellen habe ich (Auszug):
CREATE TABLE tx_myextensionkey_domain_model_category ( ... products INT(11) DEFAULT '0' NOT NULL, ... ); CREATE TABLE tx_myextensionkey_domain_model_product ( ... categories INT(11) DEFAULT '0' NOT NULL, ... ); CREATE TABLE tx_myextensionkey_category_products_mm ( ... uid_local INT(11) UNSIGNED DEFAULT '0' NOT NULL, uid_foreign INT(11) UNSIGNED DEFAULT '0' NOT NULL, sorting INT(11) UNSIGNED DEFAULT '0' NOT NULL, sorting_foreign INT(11) UNSIGNED DEFAULT '0' NOT NULL, ... );
Im TCA steht (Auszug):
... ... 'exclude' => 0, 'label' => 'LLL:EXT:myextensionkey/Resources/Private/Language/locallang_db.xml:tx_myextensionkey_domain_model_category.products', 'type' => 'select', 'size' => 10, 'minitems' => 0, 'maxitems' => 9999, 'autoSizeMax' => 10, 'multiple' => 0, 'foreign_table' => 'tx_myextensionkey_domain_model_product', 'MM' => 'tx_myextensionkey_category_products_mm', 'MM_opposite_field' => 'categories', ) ), ... ), ); ... ... 'exclude' => 0, 'label' => 'LLL:EXT:myextensionkey/Resources/Private/Language/locallang_db.xml:tx_myextensionkey_domain_model_product.categories', 'type' => 'select', 'size' => 10, 'minitems' => 0, 'maxitems' => 9999, 'autoSizeMax' => 10, 'multiple' => 0, 'foreign_table' => 'tx_myextensionkey_domain_model_category', 'MM' => 'tx_myextensionkey_category_products_mm', ) ), ... ), );
Jetzt möchte ich im Repository die korrekte Abfrage erstellen, damit in der jeweiligen Kategorie die verknüpften Produkte gelistet werden. Aber wie?
Ich habe es schon mit folgendem Join versucht:
public function findProductsByCategory() { $query = $this->createQuery(); $qomFactory = Tx_Extbase_Dispatcher::getPersistenceManager()->getBackend()->getQomFactory(); $categoriesSelector = $query->getSource(); $mmSelector = $qomFactory->selector(null, 'tx_myextensionkey_category_products_mm'); $productsSelector = $qomFactory->selector(null, 'tx_myextensionkey_domain_model_product'); $AMMJoinCondition = $qomFactory->equiJoinCondition( $mmSelector->getSelectorName(), 'uid_local', $productsSelector->getSelectorName(), 'uid' ); $MMBJoinCondition = $qomFactory->equiJoinCondition( $mmSelector->getSelectorName(), 'uid_foreign', $categoriesSelector->getSelectorName(), 'uid' ); $query->setSource( $productsSelector, $mmSelector, $categoriesSelector, Tx_Extbase_Persistence_QueryInterface::JCR_JOIN_TYPE_INNER, $MMBJoinCondition ), Tx_Extbase_Persistence_QueryInterface::JCR_JOIN_TYPE_INNER, $AMMJoinCondition ) ); return $query->execute(); }
Der funktioniert aber nicht. Da ist laut Bugtracker noch der Wurm drinne (Bug #10212, http://forge.typo3.org/issues/10212).
Hat jemand einen guten Tip auf Lager? Wäre toll.
Viele Grüße
Thomas

