2016-06-16 17 views
0

Ich versuche, eine Doctrine 2-Entity zu untergliedern, um eine Reihe von "Helfer" -Funktionen hinzuzufügen, die ich gerne verwenden würde.Subclass Doctrine 2 entity

Zum Beispiel, das ist meine Einheit:

namespace Project\Entity; 
class Product 
{ 
    private $name; 
    private $idProductCategory; 
} 

Mapping über XML-Dateien durchgeführt wird.

Dann versuche ich, es zu verlängern:

namespace Project\Entity; 
class ProductJSON extends Product { 
    public function toJSON() { 
     /* ... */ 
    } 
} 

Wenn ich versuche, dieses Objekt in Lehre zu verwenden:

$a = $entityManager->getRepository('\Project\Entity\ProductJSON'); 

ich die "Keine Zuordnung Datei mit dem Namen gefunden Project.Entity erhalten. ProductJSON.dcm.xml "Fehler. Das ist vollkommen richtig, denn ich möchte kein zusätzliches Mapping.

Ich habe Doctrine Dokumente und über zugeordnete Super Classes ausführlich gelesen (Doctrine: extending entity class), aber soweit ich verstehe, ist das für die Erweiterung von Entitäten in einem DB-Sinne.

Ich interessiere mich nicht für die Datenbank/Mapping, ich möchte nur Entitäten PHP-weise zu erweitern, um die Objekte nahtlos in meiner Anwendung zu verwenden.

Wie wird dieses Ziel erreicht?

+0

Ist nur Ihr Beispiel falsch oder fehlt Ihnen tatsächlich die Anweisung 'extends Product'? –

+0

Nur in dem Beispiel fehlt. Redigiert danke. –

Antwort

1

Sie benötigen keine Unterklasse, um zusätzliche Methoden hinzuzufügen. Fügen Sie einfach die Methoden zu Ihrer Entitätsklasse hinzu - Doctrine ignoriert sie einfach, da ihnen keine Zuordnungsinformationen zugeordnet sind.

z.

class Product 
{ 
    private $name; 
    private $idProductCategory; 

    /* ... */ 

    public function toJSON() { 
     /* ... */ 
    } 
} 
+0

Was aber, wenn ich Entitäten migriere und neu generiere? Ich würde alle Änderungen verlieren, die ich gemacht habe, oder? –

+0

Was meinen Sie mit "migrieren und neu generieren"? Normalerweise generiert Doctrine das DB-Schema aus Ihrem Entity-Klassencode, nicht umgekehrt - aber vielleicht verstehe ich Ihre Frage falsch. – dwytrykus

+0

Wie gesagt, verwende ich XML für das Schema oder das "Data Mapping". Wenn ich also dieses Schema ändere, migriere ich den DB dorthin und erzeuge Entitäten neu ('doctrine: mapping: convert annotation./Path-to-src',' doctrine: generate: entities') Ich würde verlieren, was ich getan habe ... –