---
title: "Vererbung und Doctrine"
url: "https://www.typo3.net/d/117297-vererbung-und-doctrine"
source: "typo3.net"
tags: ["Archiv","Flow","Datenbank","Extbase","Frage"]
created: "2014-02-03"
last_reply: "2014-02-05"
replies: 4
solved: false
page: 1
pages: 1
lang: "de"
---

# Vererbung und Doctrine

Archiv › Flow · 4 Antworten · gestartet 2014-02-03

## Eröffnungsbeitrag

**idseven** · 2014-02-03 · [Beitrag #1](https://www.typo3.net/d/117297-vererbung-und-doctrine/1)

Hallo in die Runde,

ich hab ein kleines Problem mit Vererbung in Flow. Ich hab eine Model-Klasse "A" mit Properties wie "name", "resource", "type" usw. Des Weiteren hab ich eine Model-Klasse "B", die von "File" erbt und noch zusätzlich Properties hat.

```php
namespace MyPackage\MyApplication\Domain\Model;

/**
 * @Flow\Scope("prototype")
 * @Flow\Entity
 */
class A {

    /**
     * @var string
     * Flow\Validate(type="NotEmpty")
     */
    protected $name;

    ...
}
```

```php
namespace MyPackage\MyApplication\Domain\Model;

/**
 * @Flow\Scope("prototype")
 * @Flow\Entity
 */
class B extends \MyPackage\MyApplication\Domain\Model\A {

    /**
     * @var string
     * Flow\Validate(type="NotEmpty")
     */
    protected $title;

    ...
}
```

Wenn ich nun ein neues B-Objekt erzeuge und persistieren möchte, bekomm ich folgende Fehlermeldung:

```php
Could not add object of Type "\MyPackage\MyApplication\Domain\Model\B"

Entity of type MyPackage\MyApplication\Domain\Model\B is missing an assigned ID for field 'Persistence_Object_Identifier'.
```

Muss man bei erbenden Klassen im Zusammenhang mit Doctrine irgendetwas berücksichtigen? Muss ich den Persistence_Object_Identifier bei der erbenden Klasse gesondert, z.B. durch eine Annotation oder ähnliches, definieren?

Zusatz:
Wenn ich ein Objekt A erstelle und persistiere, funktioniert das einwandfrei.

Hat jemand eine Idee oder einen Tipp für mich?

VG

## Antworten

### [#2](https://www.typo3.net/d/117297-vererbung-und-doctrine/2) · Unbekannter Benutzer · 2014-02-03

Du musst auf jeden Fall die Art der Vererbung per Annotation definieren. Guck Dir z.B. mal
\TYPO3\Party\Domain\Model\AbstractParty
an. Da wird
@ORM\InheritanceType("JOINED")
gesetzt. D.h. jede abgeleitete Class bekommt eine eigene DB Tabelle und die werden dann eben zusammengejoined um die Properties von A und B zu bekommen. Die Alternative ist @ORM\InheritanceType("SINGLE_TABLE") wo quasi alle Properties in einer Tabelle landen und nur entsprechend der tatsächlichen Class genutzt werden.

### [#3](https://www.typo3.net/d/117297-vererbung-und-doctrine/3) · idseven · 2014-02-03

Ich wusste dass ich da eine Annotation setzen muss, nur wusste ich nicht welche. Danke! :)

Ich bin auch schon in der Doctrine Doku fündig geworden (<https://doctrine-orm.readthedocs.org/en/latest/reference/annotations-reference.html?highlight=annotations#annref-inheritancetype>). Probier ich direkt mal aus und berichte!

### [#4](https://www.typo3.net/d/117297-vererbung-und-doctrine/4) · idseven · 2014-02-04

Ok, das war eine schwere Geburt, aber jetzt macht es das was es soll. Ich hatte neben den fehlenden Annotations noch weitere Bugs drin, wie z.B. die Super-Klasse nicht abstract gesetzt, den Super-Konstruktor nicht aufgerufen, etc.

Bei den Annotations bin ich noch neben "@ORM\InheritanceType("JOINED")" und "@ORM\InheritanceType("SINGLE_TABLE")" über "@ORM\MappedSuperclass" gestolpert, die genau das macht, was ich brauche. Die Class-Definition der Super-Klasse sieht jetzt also so aus:

```php
/**
 * @Flow\Entity
 * @ORM\MappedSuperclass
 */
abstract class A {
   ...
}
```

Danke nochmal für den Tipp!

### [#5](https://www.typo3.net/d/117297-vererbung-und-doctrine/5) · Unbekannter Benutzer · 2014-02-05

Super das es geklappt hat. Ich kriege übrigens leider weder Benachrichtigungen bei PM noch kann ich antworten... Ich muss das mal mit Mittwald klären. Aber dann weißt Du Bescheid.

---

Quelle: „Vererbung und Doctrine“, typo3.net, https://www.typo3.net/d/117297-vererbung-und-doctrine
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
