Den Abfragecache von Doctrine in Symfony verhindern

8

In meiner Symfony / Doctrine-App habe ich eine Abfrage, die mit RANDOM () bestellt. Ich rufe dieselbe Methode mehrmals auf, aber es sieht so aus, als ob das Ergebnis der Abfrage zwischengespeichert wird.

Hier ist mein relevanter Code:

%Vor%

Leider wird immer derselbe Datensatz zurückgegeben, unabhängig davon, ob ich null sowohl an useQueryCache als auch an useResultCache übergebe. Ich habe versucht, false anstelle von null zu verwenden, aber das hat auch nicht funktioniert. Schließlich habe ich auch versucht, setResultCacheLifeSpan(0) und setResultCacheLifeSpan(-1) aufzurufen, aber keiner dieser Aufrufe hat einen Unterschied gemacht.

Irgendwelche Erkenntnisse darüber, wie Caching verhindert werden kann, da bei jedem Aufruf dieser Methode eine andere zufällige Zeile ausgewählt werden soll?

Bearbeiten: Ich habe auch versucht, clearResultCache() aufzurufen, aber das hat am Ende einen Fehler verursacht, der besagt: "Ergebnis-Cache-Treiber nicht initialisiert".

Edit 2: Wie gewünscht, folgt hier das SQL, das durch Aufruf von $query->getSqlQuery() :

generiert wurde %Vor%     
Matt Huggins 07.02.2011, 00:44
quelle

2 Antworten

4

Es stellt sich heraus, dass ich ein Idiot bin. Ich habe versucht, meine Anfrage für diese Frage zu vereinfachen, und dabei habe ich die wahre Ursache nicht erfasst. Ich hatte einen where() und andWhere() Aufruf, und die Kombination von Bedingungen führte dazu, dass nur ein möglicher Datensatz gefunden wurde. Danke, dass Sie sich die Zeit genommen haben, zu antworten, alle, Entschuldigung, dass Sie Ihre Zeit verschwendet haben!

    
Matt Huggins 08.02.2011, 23:10
quelle
2

Doctrine speichert auch Entitäten, die Sie im selben Request / Script-Lauf erstellt haben.

Zum Beispiel:

%Vor%

Die print_r enthält nicht die Änderungen, die Sie während des Schlafs vorgenommen haben.

Der folgende Code wird diese Art von Speichercache entfernen:

%Vor%

PS: Diese Antwort wurde hinzugefügt, weil ich in diesem Thema versucht habe, das obige Problem zu lösen.

    
ReenL 31.03.2011 13:08
quelle