Nehmen wir an, ich habe eine Entität namens Product
, und diese Entität wird jedes Mal geladen, wenn ein Benutzer die Produktinformationsseite erreicht. Normalerweise würde ich das Objekt in Zend_Cache (memcache) für eine Stunde speichern, um nicht die Datenbank für jede Anfrage zu treffen, aber soweit ich weiß, ist das mit Doctrine2-Entitäten wegen der Proxy-Objekte nicht möglich.
Meine Frage ist also, wie kann ich vermeiden, dass für jede Anfrage dieselbe Entität aus der Datenbank geladen wird?
[EDIT]
Ich habe versucht Doctrine Cache so zu benutzen
%Vor%
Aber ich bekomme den folgenden Fehler
Warnung: require (App / Entität / Proxy / _ CG _ /App/Entity/Category.php) [function.require]: Stream konnte nicht geöffnet werden: Keine solche Datei oder kein Verzeichnis in /opt/vhosts/app/price/library/Doctrine/Common/ClassLoader.php auf Zeile 163
Das ist für Zend Cache genauso, wie Sie die Entität wegen der Proxy-Klasse
nicht serialisieren könnenSie haben mehrere Möglichkeiten:
BEARBEITEN : Wenn Ihnen der Aufwand für die Hydration nicht wichtig ist, verwenden Sie mysql, und Ihre Produkte und zugehörigen Tabellen ändern sich nicht sehr oft mySQL-Abfragecache Es ist ein ziemlich stumpfes Objekt, aber nützlich genug, um es zu erwähnen.
Sie könnten versuchen, __sleep
oder __wakeup
Methoden für Ihre Entitätsklasse zu implementieren, da Doctrine 2 spezielle Anforderungen und Einschränkungen bezüglich der Serialisierung / Deserialisierung von Entitäten hat (was beim Speichern in Zend_Cache passiert).
Ich finde das extrem merkwürdig, da ich mich selbst damit beschäftigt habe und keine Probleme mit dem Proxy-Objekt hatte, das in der Datenbank gespeichert wurde. Also ich rate deine Konfiguration nicht 100% Setup?
Wenn Sie das Problem mit Ihrer Konfiguration finden, dann seien Sie sich dessen sehr bewusst, was timdev Ihnen gesagt hat MÜSSEN das Objekt wieder in den EntityManager einbinden, sonst werden Sie seltsame Fehler in der Leitung haben.
Eine vierte Lösung, die für Sie verfügbar ist, besteht auch darin, die Daten als ein Array anstelle eines Objekts abzurufen, aber dann verlieren Sie natürlich alle mit Ihrem Modul verbundenen Funktionen, die möglicherweise nicht genau Ihren Vorstellungen entsprechen.
Es scheint mir mehr wie ein Konfigurationsfehler. Entweder wurden keine Proxies generiert oder es liegt ein Fehler mit dem Proxy-Verzeichnis und dem Namespace vor.
Abhängig von Ihrer Konfiguration können Proxies entweder automatisch oder manuell generiert werden. Wurden Ihre Proxies tatsächlich unter App/Entity/Proxy
generiert? Ist das in der Tat das richtige Verzeichnis?
FYI-Proxys können manuell generiert werden, indem doctrine orm:generate-proxies <dest-dir>
Tags und Links caching memcached doctrine2 zend-framework