---
title: "m:n-Relation in List-View einbinden"
url: "https://www.typo3.net/d/119696-mn-relation-in-list-view-einbinden"
source: "typo3.net"
tags: ["Extensions","Entwicklung","Frage","TYPO3 6.x"]
created: "2015-02-11"
last_reply: "2015-02-13"
replies: 2
solved: false
page: 1
pages: 1
lang: "de"
---

# m:n-Relation in List-View einbinden

Extensions › Entwicklung · 2 Antworten · gestartet 2015-02-11

## Eröffnungsbeitrag

**jp_dev** · 2015-02-11 · [Beitrag #1](https://www.typo3.net/d/119696-mn-relation-in-list-view-einbinden/1)

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:

```php
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:

```php
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:

```html
<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>
```

## Antworten

### [#2](https://www.typo3.net/d/119696-mn-relation-in-list-view-einbinden/2) · jp_dev · 2015-02-12

Gleiches Problem, neuer Ansatz:
Kann ich vom Kategorie-Model aus die genannte Repository-Anfrage aufrufen und diese über das Accesoir-Model laufen lassen?

Also ganz grob (funktioniert noch nicht):

Model-Kategory:

```php
    public function getXXXAccessory() {
            $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Extbase\Object\ObjectManager');
            $myRepository = $objectManager->create('XXXProducts\XXXproducts\Domain\Repository\XXXFamilyRepository');
            $this->objects = $myRepository->findAccss(5);

            echo 'Test';
            echo '<pre>';
            var_dump($this->objects);
            echo '</pre>';
exit;

            $this->xxxAccessory = $this->objects;
        return $this->xxxAccessory;
```

Repository-Kategory

```php
    /**
     * Test
     *
     * @param XXXProducts\XXXproducts\Domain\Model\Accessory $accessory The reference post
     * @return XXXProducts\XXXproducts\Domain\Model\Accessory
     *
     */

    public function findAccss(XXXProducts\XXXProducts\Domain\Model\Accessory $accessory) {
        $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 = 5'
        );
        $accessory = $query->execute();

        return $accessory;
    }
```

**Edit:**
Hier im Forum habe ich einen älteren Beitrag gefunden, der mir etwas weiter geholfen hat:
[/d/117391-komplexe-abfrage-fuer-ein-model-loesung-ueber-tca-oder-repository](https://www.typo3.net/d/117391-komplexe-abfrage-fuer-ein-model-loesung-ueber-tca-oder-repository)
Allerdings bekomm ich nur kein Ergebniss zurück bzw. eine leere Seite, egal ob mit oder Model angaben im Repository...

### [#3](https://www.typo3.net/d/119696-mn-relation-in-list-view-einbinden/3) · jp_dev · 2015-02-13

Für interessierte:
Da mir keine bessere Lösung eingefallen ist:

Model-Kategorie

```php
          if(is_null($this->objects)){

            $uidString = explode(':',$this);
            if(isset($uidString[1])){
                $uid = $uidString[1];
            }

            $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Extbase\Object\ObjectManager');

            $Repository = $objectManager->create('XXXProducts\XXXproducts\Domain\Repository\AccessoryRepository');
            $this->xxxAccessory = $Repository->findAccss($uid);
        }
        return $this->xxxAccessory;
```

Repository:

```php
    public function findAccss(XXXProducts\XXXProducts\Domain\Model\Accessory $accessory) {
    $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 = '.$accessory
    );
    $accessory = $query->execute();
     
    return $accessory;
    }
```

Falls jemand eine schönere Lösung hat...

---

Quelle: „m:n-Relation in List-View einbinden“, typo3.net, https://www.typo3.net/d/119696-mn-relation-in-list-view-einbinden
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
