Hallo,
stehe vor folgendem Problem:
Ich hab eine Kategorie die mit Produkten gefüllt werden kann (Relation 1:n) und dann noch Accessoires in denen der Redakteur verschiedene Kategorien zu einem Accessoire hinzufügen kann (m:n). Da sich die Accessoires regelmäßig ändern, die Produkte jedoch nicht, soll dies auch so bleiben.
aggregateRoot ist die Kategorie.
Die Produkte lassen sich Problemlos auslesen, nur schaffe ich es irgendwie nicht, die Accessoires einzubinden.
Mir ist aufgefallen dass es im TCA der Kategorien keinen Verweis auf Accessoires gibt, wie es bei den Produkten der falls ist (die Extension ist mit Extension Builder angelegt worden).
Was mach ich falsch?
Controller:
class XXXFamilyController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {
/**
* xxxFamilyRepository
*
* @var \XXXProducts\XXXproducts\Domain\Repository\XXXFamilyRepository
* @inject
*/
protected $xxxFamilyRepository = NULL;
/**
* action list
*
* @return void
*/
public function listAction() {
$getPresetCategory = $this->settings[family];
if(!isset($getPresetCategory)) {
$getPresetCategory = 1;
}
$xxxFamilies = $this->xxxFamilyRepository->findThisFam($getPresetCategory);
$this->view->assign('xxxFamilies', $xxxFamilies);
}
}
Repository:
class XXXFamilyRepository extends \TYPO3\CMS\Extbase\Persistence\Repository {
/**
* SELECT *
*
* @return mixed
*
*/
public function findAll() {
$query = $this->createQuery();
$query->getQuerySettings()->setRespectStoragePage(FALSE);
$result = $query->execute();
return $result;
}
public function findThisFam($fam) {
$query = $this->createQuery();
$query->getQuerySettings()->setRespectStoragePage(FALSE);
$condition = $query->equals('uid', $fam);
$params1 = $query->logicalAnd($condition);
$query->matching($params1);
$query->setLimit(1);
$result = $query->execute();
$result['accessory'] = $this->findAccss($fam);
return $result;
}
public function findAccss($fam) {
$query = $this->createQuery();
$query->getQuerySettings()->setRespectStoragePage(FALSE);
$query->statement('
SELECT ac.option_title,ac.order_no,ac.description,ac.reference
FROM tx_xxxproducts_domain_model_accessory ac
JOIN tx_xxxproducts_accessory_xxxfamily_mm mm ON mm.uid_local = ac.uid
WHERE mm.uid_foreign = '.$fam
);
$accessory = $query->execute();
return $accessory;
}
protected $defaultOrderings = array(
'sorting' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING,
);
}
Für das Fluid habe ich bereits folgende Schreibweisen ausprobiert:
<f:for each="{xxxFamily[accessory]}" as="accessory">
{accessory.optionTitle}
</f:for>
<f:for each="{xxxFamily.{accessory}}" as="accessory">
{accessory.optionTitle}
</f:for>
<f:for each="{xxxFamily.accessory}" as="accessory">
{accessory.optionTitle}
</f:for>
<f:for each="xxxFamily{accessory}}" as="accessory">
{accessory.optionTitle}
</f:for>