Hallo zusammen,
folgendes Problem versuche ich gerade zu lösen, vielleicht hat jemand einen guten Rat oder kann mir sagen, ob ich mit dem Ansatz in die falsche Richtung laufe:
Wenn ich nun ein konkretes Stellenangebot vorliegen habe, möchte ich anhand der darin gespeicherten id_unternehmen nun das konkrete Unternehmensobjekt erhalten, d.h. die passende Unternehmensklasse instanzieren - mittels o.g. Factory-Klasse. Ist das Vorgehen der Factory generell ok, also einen Zwischenschritt mit DB-Abfrage zu unternehmen, der den Unternehmenstyp ermittelt?
Bis hierhin funktioniert erst einmal alles problemlos; problematisch wird das Ganze nun aber im Zusammenspiel mit dem verwendeten Framework: Symfony2 mit Doctrine als ORM. Ich habe beide DB-Entitys mittels Annotations korrekt miteinander verknüpft (@ORM\OneToMany, @ORM\ManyToOne), allerdings muss ich in der ManyToOne-Annotation ja die bei der Instanzierung zu verwendende Klasse angeben. Eigentlich müsste hier stehen UnternehmenFactory::make($id_unternehmen, $connection), dies ist aber in Doctrine offenbar nicht so ohne Weiteres möglich.
Hat jemand eine Anregung für mich oder einen Tipp, wie ich Doctrine die Nutzung der Factory beibringe?
Beste Grüße
Dominik
folgendes Problem versuche ich gerade zu lösen, vielleicht hat jemand einen guten Rat oder kann mir sagen, ob ich mit dem Ansatz in die falsche Richtung laufe:
- Ich habe verschiedene Angebote in einer Datenbank, die von Unternehmen bereitgestellt werden (jedes Unternehmen kann mehrere Angebote einstellen).
- Es gibt eine Tabelle mit Angeboten und eine Tabelle mit Unternehmen, verknüpft durch eine beiderseits vorhandene Spalte id_unternehmen.
- Ein Unternehmen kann unterschiedlichen Typs sein, z.B. kann es sehr klein sein (1 Mitarbeiter) oder ein Mittelständler (z.B. 500 Mitarbeiter) oder ein großer Konzern (z.B. 20.000 Mitarbeiter). Abhängig vom konkreten Unternehmenstyp gibt es ein leicht abweichendes Verhalten, deshalb existiert für jeden Unternehmenstyp eine eigene Klasse, die jeweils von einer Basisklasse "Unternehmen" erbt. Die Instanzierung geschieht über eine Factory-Klasse, die anhand der ID des Unternehmens den Typ ermittelt. Abhängig vom Typ wird dann die passende Klasse instanziert bzw. zurückgegeben:
PHP-Code:
class UnternehmenFactory {
public static function make($id_unternehmen, $connection) {
$sql = "
SELECT
typ
FROM unternehmen
WHERE
id_unternehmen = :id_unternehmen";
// DB-Abfrage...
switch ($unternehmenstyp) {
case "mini":
$unternehmen = new Einzelunternehmen();
break;
case "medium":
$unternehmen = new Mittelstaendler();
break;
case "maxi":
$unternehmen = new Konzern();
break;
}
$unternehmen->setId($id_unternehmen);
return $unternehmen;
}
}
Wenn ich nun ein konkretes Stellenangebot vorliegen habe, möchte ich anhand der darin gespeicherten id_unternehmen nun das konkrete Unternehmensobjekt erhalten, d.h. die passende Unternehmensklasse instanzieren - mittels o.g. Factory-Klasse. Ist das Vorgehen der Factory generell ok, also einen Zwischenschritt mit DB-Abfrage zu unternehmen, der den Unternehmenstyp ermittelt?
Bis hierhin funktioniert erst einmal alles problemlos; problematisch wird das Ganze nun aber im Zusammenspiel mit dem verwendeten Framework: Symfony2 mit Doctrine als ORM. Ich habe beide DB-Entitys mittels Annotations korrekt miteinander verknüpft (@ORM\OneToMany, @ORM\ManyToOne), allerdings muss ich in der ManyToOne-Annotation ja die bei der Instanzierung zu verwendende Klasse angeben. Eigentlich müsste hier stehen UnternehmenFactory::make($id_unternehmen, $connection), dies ist aber in Doctrine offenbar nicht so ohne Weiteres möglich.
Hat jemand eine Anregung für mich oder einen Tipp, wie ich Doctrine die Nutzung der Factory beibringe?
Beste Grüße
Dominik
Kommentar