Machen Lehre verwenden Sie den Ergebnis-cache standardmäßig
Ich bin verbindlich, Memcache zu Lehre und es scheint, muss ich useResultCache
explizit in jeder Abfrage. Ist es möglich, um es true
standardmäßig mit der Fähigkeit zu useResultCache(false)
wo es nicht benötigt wird?
- Haben Sie eine Lösung für dieses?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß, diese Frage ist alt, aber ich werde schreiben, bis die beste Antwort, die kommt mir in den Sinn.
1) Abstrahieren Ihre Abhängigkeit Schnittstelle ( z.B. - dependency injection-Muster inject EntityManager in der Klasse, die erstellt Abfragen und verwenden EntityManagerInterface statt )
Nun, entweder:
a) [ Besser, aber länger ] Erstellen Sie eine neue Komposition-im Zusammenhang der Umsetzung für EntityManagerInterface, dass die proxy-Aufrufe an original entityManager und Ergebnis-cache-flag auf true:
b) [ Nicht so gut, aber kürzer ] Erweitern die EntityManager-Klasse und überschreiben Sie die createQuery. Denken Sie daran, dass dies im Allgemeinen nicht eine gute übung, und man sollte definitiv nicht alles schreiben, was in dieser Klasse nicht mehr auf, aber statt Refactoring in a) :
Erstellen Sie eine wrapper Klasse/Funktion, die explizit setzt
useResultCache(true)
und verwenden, die überall statt der nativen Funktion.Können Sie hack die Lehre Kern ein wenig durch die Einstellung der Standard-Wert von
$_useResultCache
zuTRUE
im\Doctrine\ORM\AbstractQuery
. Damit werden alle Abfragen verwenden, die resultCacheDriver standardmäßig, und Sie können leicht drehen Sie den cache deaktivieren für einzelne Abfragen mit$query->useResultCache(FALSE)
Es ist eine sehr nützliche hack, der spart Ihnen eine Menge Tipparbeit, aber Vorsicht; ich habe festgestellt, dass das caching driver nicht cache faul geladen Vereine, die noch nicht initialisiert wurde (die offensichtlich jetzt denke ich über ihn). Manchmal ist es sicherer, nur der wiederum Ergebnis-caching auf für jede einzelne Abfrage.
AbstractQuery
ist die einfachste Lösung.