---
title: "Extbase N:M Relation mit Attributen"
url: "https://www.typo3.net/d/117360-extbase-nm-relation-mit-attributen"
source: "typo3.net"
tags: ["Extensions","Extbase","Frage"]
created: "2014-02-11"
last_reply: "2015-06-18"
replies: 9
solved: true
page: 1
pages: 1
lang: "de"
---

# Extbase N:M Relation mit Attributen

Extensions › Extbase · 9 Antworten · gelöst · gestartet 2014-02-11

## Frage

**Unbekannter Benutzer** · 2014-02-11 · [Beitrag #1](https://www.typo3.net/d/117360-extbase-nm-relation-mit-attributen/1)

Hallo miteinander,

ich habe versucht nach diesem Tutorial hier <http://blog.undkonsorten.com/datenbankrelationen-typo3-irre-extension> eine N:M Relation mit Attributen herzustellen. So gesehen habe ich gerade mal versucht, den gegebenen Code dort zum laufen zu bringen.

Im Backend läuft auch alles, alle Relationen und Datensätze können erstellt werden und werden auch richtig in der Datenbank gespeichert.

Mein Problem ist jetzt allerdings: Wie arbeite ich weiter mit diesen Daten ?
Wenn ich ein Model/Controller/Repository/Plugin erstelle, um mir alle Firmen ausgeben zu lassen, erhalte ich immer eine SQL Fehlermeldung. Scheinbar versucht Extbase die mitarbeiterid bzw firmaid nicht aus der Relationstabelle, sondern direkt aus der Mitarbeiter- bzw. Firmentabelle zu lesen. Dort gibt es dieses Attribut natürlich nicht, was zum Fehler führt.

Hat jemand von euch eine Idee, was noch getan werden muss, damit Extbase beim Repository Request auf die richtige (die Relations-)Tabelle zugreift, bzw. wie ich ansonsten mit den Daten arbeiten kann/soll/muss ?
Wie gesagt, in der Datenbank wird alles richtig zugeordnet und läuft bestens. :(

Vielen Dank im voraus!

## Beste Antwort

**maxhb** · 2015-06-18 · [Beitrag #9](https://www.typo3.net/d/117360-extbase-nm-relation-mit-attributen/9)

Hallo!
Hat mittlerweile jemand eine Lösung für das Problem gefunden? Scheitere im Prinzip an der selben Stelle, die TCA-Konfiguration funktioniert tadellos, wenn man die Datensätze über das BE von TYPO3 bearbeitet, aber alle Abfragen per Extbase scheitern bzw. liefern keine Ergebnisse für die Relation.

Würde mich freuen, wenn jemand eine Lösung parat hat, denn MM-Relationen mit Attribut sind schon ein wichtiges Mittel zur Datenmodellierung.

CU
maxhb

## Antworten

### [#2](https://www.typo3.net/d/117360-extbase-nm-relation-mit-attributen/2) · Schweriner · 2014-02-11

In dem Model muss das Attribut für die untergeordnete Tabelle als ObjectStorage deklariert werden.

### [#3](https://www.typo3.net/d/117360-extbase-nm-relation-mit-attributen/3) · Unbekannter Benutzer · 2014-02-11

Das habe ich auch so gemacht.

```php
<?php
namespace sb\Clustertest\Domain\Model;

/***************************************************************
 *  Copyright notice
 *
 *  (c) 2014 
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
 *  free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  The GNU General Public License can be found at
 *  http://www.gnu.org/copyleft/gpl.html.
 *
 *  This script is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  This copyright notice MUST APPEAR in all copies of the script!
 ***************************************************************/

/**
 *
 *
 * @package clustertest
 * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later
 *
 */
class Hotel extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {

	/**
	 * title
	 *
	 * @var \string
	 */
	protected $title;

	/**
	 * offers
	 *
	 * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Sb\Clustertest\Domain\Model\Offer>
	 */
	protected $offers;

	/**
	 * __construct
	 *
	 * @return Hotel
	 */
	public function __construct() {
		//Do not remove the next line: It would break the functionality
		$this->initStorageObjects();
	}


	/**
	 * Initializes all ObjectStorage properties.
	 *
	 * @return void
	 */
	protected function initStorageObjects() {
		/**
		 * Do not modify this method!
		 * It will be rewritten on each save in the extension builder
		 * You may modify the constructor of this class instead
		 */
		$this->offers = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
	}

	/**
	 * Returns the title
	 *
	 * @return \string $title
	 */
	public function getTitle() {
		return $this->title;
	}

	/**
	 * Sets the title
	 *
	 * @param \string $title
	 * @return void
	 */
	public function setTitle($title) {
		$this->title = $title;
	}

	/**
	 * Returns the offers
	 *
	 * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Sb\Clustertest\Domain\Model\Offer> $offers
	 */
	public function getOffers() {
		return $this->offers;
	}

	/**
	 * Sets the offers
	 *
	 * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Sb\Clustertest\Domain\Model\Offer> $offers
	 * @return void
	 */
	public function setOffers(\sb\Clustertest\Domain\Model\Offer $offers) {
		$this->offers = $offers;
	}

}
?>
```

Bei Offer.php eben genau andersrum. Funktioniert leider trotzdem nicht. Scheint generell nicht so zu funktionieren. Schade.

### [#4](https://www.typo3.net/d/117360-extbase-nm-relation-mit-attributen/4) · Schweriner · 2014-02-11

Dein Namespace oben ist klein geschrieben, in den ObjectStorages aber groß (\Sb\). Weiß zwar nicht ob das schlimm ist, aber sicher, dass das so gehört?

### [#5](https://www.typo3.net/d/117360-extbase-nm-relation-mit-attributen/5) · Unbekannter Benutzer · 2014-02-11

Als ich den Namespace in den ObjectStorages kleingeschrieben hatte, hat Extbase gemeckert. Groß ging es dann ( bis zum SQL Error ). Das hab ich leider schon öfter beobachtet, dass Extbase da merkwürdig ist mit dem Namespace ;)

Zur Vollständigkeit hier mal der SQL-Error:

```php
#1247602160: Unknown column 'tx_clustertest_domain_model_offer.hotelid' in 'where clause': SELECT tx_clustertest_domain_model_offer.* FROM tx_clustertest_domain_model_offer WHERE tx_clustertest_domain_model_offer.hotelid = '1' AND tx_clustertest_domain_model_offer.deleted=0 AND tx_clustertest_domain_model_offer.t3ver_state<=0 AND tx_clustertest_domain_model_offer.pid<>-1 AND tx_clustertest_domain_model_offer.hidden=0 AND tx_clustertest_domain_model_offer.starttime<=1392133920 AND (tx_clustertest_domain_model_offer.endtime=0 OR tx_clustertest_domain_model_offer.endtime>1392133920) ORDER BY tx_clustertest_domain_model_offer.hotelsort ASC
```

### [#6](https://www.typo3.net/d/117360-extbase-nm-relation-mit-attributen/6) · Schweriner · 2014-02-11

Warum erstellst Du eigentlich überhaupt ein Repository zur Ausgabe aller Firmen? Gibt es zu den Firmen kein Repository bei dem Du mit findAll alle ausgeben kannst?

"Wenn ich ein Model/Controller/Repository/Plugin erstelle, um mir alle Firmen ausgeben zu lassen, erhalte ich immer eine SQL Fehlermeldung."

### [#7](https://www.typo3.net/d/117360-extbase-nm-relation-mit-attributen/7) · Unbekannter Benutzer · 2014-02-11

Ich nutze das standardmäßig vom Extension Builder miterstellte Repository, das in der Regel leer ist. Zur Testausgabe nutze ich genau die Funktion findAll(). Bei genau dieser, von Extbase Standardmäßig implementierten Funktion, wirft Extbase mir ja den SQL-Fehler.

Nebenbei, um der Verwirrung vorzubeugen: Der Code ist nun mit Hotels/Offers aus dem IRRE_Tutorial ausgestattet, nicht mehr mit Mitarbeitern und Firmen ;) Das Prinzip bleibt aber gleich.
Leider hört das IRRE_Tutorial bei der TCA Konfiguration auf ( und die funktioniert soweit ), daher muss ich mir die Models/Controller und Co. ja irgendwie selbst erstellen. Bloß bei der Ausgabe haperts dann eben. Und ich brauche doch ein Model/Controller Set um die Daten vernünftig auszugeben, oder bin ich grad einfach zu blind ?

### [#8](https://www.typo3.net/d/117360-extbase-nm-relation-mit-attributen/8) · Unbekannter Benutzer · 2014-03-11

Ich muss das hier leider nochmal hochholen, da ich nach wie vor keine Lösung für das Problem finden konnte und so langsam echt am verzweifeln bin. Ich fass dann nochmal kurz die Problematik zusammen:

- Im Backend funktionieren die Relationen, die Datenbank sieht auch sauber aus.
- Sobald ich eine Frontendausgabe per repository->findAll() erzeugen möchte, tritt o.g. SQL-Fehler auf. ( er scheint die Spalte aus der Relationstabelle in der Firmen/Hotel bzw Angebot/Mitarbeiter Tabelle zu suchen... warum auch immer !? )

Entweder scheint da wirklich irgendwo der Wurm drin zu sein, was die Bezeichner der foreign_field's etc. angeht ( was aber merkwürdig wäre, denn im Backend wird die Relation ja richtig dargestellt.. ) oder kann es sein, dass ich für diese Art von N:M Relation nicht drumherum komme, den RepositoryRequest selbst zu schreiben? ( was ja auch prinzipiell quatsch ist, warum kann Extbase die Verknüpfung in der Datenbank herstellen bzw. richtig schreiben, aber beim lesen dann diese Relation nicht vernünftig auflösen ? )

### [#9](https://www.typo3.net/d/117360-extbase-nm-relation-mit-attributen/9) · maxhb · 2015-06-18 · Beste Antwort

(Text siehe oben unter „Beste Antwort“.)

### [#10](https://www.typo3.net/d/117360-extbase-nm-relation-mit-attributen/10) · harald1972 · 2015-06-18

Hallo zooloohed,

ist zwar schon ein paar Tage her, aber ich schreib mal, was mir noch ein- oder aufgefallen ist.
Auch wenn es oben schon erwähnt wurde...

Der Namespace beginnt mit kleinem sb in Zeile 2 und in Zeile 109 - überall sonst Sb.

Und wo ich grad in Zeile 109 bin...
der Parameter muss ein ObjectStorage sein (wie im comment Z.106 richtig angegeben). Hier (Z.109) steht aber nur (\sb\Clustertest\Domain\Model\Offer $offers)

.

Jetzt hab ich mir nochmal dieses Tutorium angeschaut, weil
ich hab zwar "M:N mit Attributen" schon realisiert, allerdings war diese Relation dann eine eigene Entität und hatte einen Verweis auf ein ValueObject. Ich hab also M:N in M:1-1:N aufgetrennt (3.Normalform, wenn ich nicht irre).
Analog zum Tutorial-Beispiel hätte ich dann keine Tabelle tx_myext_mitarbeiter_firma_mm, sondern eine tx_myext_domain_model_vertrag und diese referenziert meine ValueObject-Tabelle tx_myext_domain_model_position.

Allerdings steht in dem Tutorial ja auch
*"Man sieht jetzt schon das die Relationstabelle nicht mehr klassisch aufgebaut ist , sondern wie eine ganz normale „Datensatz“-Tabelle."*
...und erkenne ganz nebenbei, daß es sich dort gar nicht um Extbase-Tabellen handelt.
Also z.B. nur tx_ukdbtutorial_firma anstatt tx_ukdbtutorial_domain_model_firma.

Gruß
Harald

---

Quelle: „Extbase N:M Relation mit Attributen“, typo3.net, https://www.typo3.net/d/117360-extbase-nm-relation-mit-attributen
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
