Doktrin 2 und ORM: Wie speichert man jede Abfrage für eine Entität?

8

Ich kämpfe mit diesem Problem eine Menge Zeit und fand, dass ich offiziell nur einige benutzerdefinierte Abfragen zwischenspeichern konnte (useResultCache (true) auf Abfrageobjekt). Aber ich muss jede Abfrage in meiner Anwendung in eine Tabelle zwischenspeichern. Was ist mit den Methoden von find * auf EntityManager? ...

Könnte mir jemand helfen, eine elegante Lösung zu finden?

    
Andrii Vasyliev 27.03.2013, 14:23
quelle

1 Antwort

12

Dies wird noch nicht unterstützt und sollte eventuell in Ihrer Service-Schicht oder in Ihren erweiterten Repositories behandelt werden.

Was Sie suchen, ist der Second-Level-Cache wie in Hibernate , was Ihnen im Grunde erlaubt Schließen Sie einen Schlüssel-Wert-Speicher wie redis, riak, mongodb, etc. an, um Dinge schnell zu machen, wenn Operationen einfache Abrufoperationen sind.

In Ссылка gibt es eine Anfrage zur Arbeit in Bearbeitung, die wahrscheinlich in Doctrine ORM 2.5 landen wird, also bitte sieh dir das an.

%Vor%

Sie können dies erzwingen, dass das Basis-Repository für das ORM in Ihrer Konfiguration während des Bootstrappings Ihrer App verwendet wird:

%Vor%

Dies zwingt Sie auch, Cache-Einträge zu löschen, wenn ein Update / Save für eines Ihrer Entitäten geschieht:

%Vor%

Bitte beachten Sie, dass diese Implementierung NICHT alle Zugriffe auf Ihre Datenbank für eine bestimmte Entität abfängt. Es wird nicht die lazy Loading-Initialisierung abfangen, die durch Proxies verursacht wird, und es ist sehr zerbrechlich. Daher sollten Sie einige geeignete Integrationstests durchführen, um es zu unterstützen.

    
Ocramius 29.03.2013, 11:51
quelle

Tags und Links