Symfony2 entityManager im Modell
Werde ich entity_manager in meinem Modell. Aber entity_manager ist nur verfügbar im regler: throw $em = $this->get('doctrine.orm.entity_manager')
. Also, ich habe zu definieren-Modell Methoden mit $em
parameter. Das macht phpUnit Tests ziemlich schwierig und verstößt gegen die Anwendung Struktur. Zum Beispiel:
class Settings
{
public static function getParam( $em, $key )
{
$em->createQuery("
SELECT s
FROM FrontendBundle:Settings s
WHERE s.param = {$key}
");
return $em->getResult();
}
}
Ist es jedem Ansatz zu verwenden entity_manager service-Modell in Abschnitt?
InformationsquelleAutor Aleksei Kornushkin | 2011-02-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersten Start Hinweis: per Konvention Ihre Entity-Klasse sollte wohl einzigartig. Also, die Einstellung, nicht die Einstellungen. Man könnte argumentieren, dass die "Einstellungen" als eine Gruppe von verwandten Einstellungen könnte gesehen werden, als eine Einheit. Immer noch etwas das zu beachten ist.
In Doctrine2 verwenden Sie ein repository, um diese Art der Abfrage. In Ihrem code, wo Sie waren das gehen zu rufen
Settings::getParam
würden Sie statt Holen Sie sich das repository und-Abfrage. In symfony2, sagen:Standardmäßig, ohne das schreiben von code repositories definieren getByXXXX für jedes Feld in Ihrer Einheit.
Wenn Sie eine kompliziertere Abfrage zu machen, können Sie verlängern das repository.
Dann würde man diese Methode in der gleichen Weise.
Andere würden Sie befürworten die Verwendung von einem Manager-Objekt, das wäre dann nicht gebunden an die Person/ORM, aber das ist eine unnötige Komplikation, in diesem Fall, denke ich.
Doctrine2 ist speziell entwickelt, um nicht lassen Sie Sie verwenden, Abfragen in der Entity-Datei; Entitäten und EntityManagers sind eigentlich zwei Aspekte des standard-Modells von layer, split auseinander, um die Durchsetzung von best practices. Finden Sie in diesem Artikel: http://symfony2basics.jkw.co.nz/get-symfony2-working/entities/
InformationsquelleAutor Jeremy Warne
Abfragen in der Entity-Klasse,
Putting-Abfragen in Sie Person scheint mir komisch. Der gleichen Weise wie putting-Abfragen in Ihre model-Klasse in der Lehre 1 es wird nicht als gute Praxis. Entity-Klassen sollte leicht sein.
Bin ich eigentlich lernen Doctrine2 und dachte über ähnliches problem: wohin mit den Abfragen?
In der Lehre 1 gibt es spezielle Tisch-Klassen, und ich hatte erwartet, etwas ähnliches in der Lehre 2.
Repository Pattern
Heute habe ich gelernt, dass Doctrine 2 ist mit dem Repository-Pattern: http://www.doctrine-project.org/docs/orm/2.0/en/reference/working-with-objects.html#custom-repositories
Allerdings zum abrufen einer Instanz der repository-Klasse, die Sie verwenden müssen Entity-Manager. Die eine oder andere Weise müssen Sie es.
Immer noch, nach dem repository-Muster scheint die bessere Wahl.
Meiner Meinung nach, Wenn Sie darauf bestehen, mit query-Methode in der Entity-Klasse übergibt man einen Entity Manager.
Testen
Warum die Notwendigkeit der Weitergabe von entity-manager macht es schwer zu testen? Aus meiner Erfahrung expliziten Abhängigkeiten machen das testen einfacher, da können Sie Steuern in dem test (und verspotten Sie zum Beispiel).
Auf der anderen Seite vorbei an der entity-manager, um jede Methode ist nicht die richtige Wahl. In einem solchen Fall würde ich machen, die Abhängigkeit obligatorisch und fügen Sie es dem contructor.
InformationsquelleAutor Jakub Zalas