'da Doktrinin sorgu önbelleğini önleme Symfony/Doctrine uygulamasında, RANDOM() tarafından verilen siparişlerin bir sorgusu var. Aynı yöntemi birkaç kez çağırıyorum, ancak sorgunun sonucu önbelleğe alınmış gibi görünüyor. Beni useQueryCache
ve useResultCache
hem null
geçen bakılmaksızınSymfony
$query = $table->createQuery('p')
->select('p.*, RANDOM() as rnd')
->orderBy('rnd')
->limit(1)
->useQueryCache(null)
->useResultCache(null);
$result = $query->fetchOne();
Maalesef aynı kayıt her seferinde döndürülür:
İşte benim alakalı kod. null
yerine false
kullanmayı denedim, ancak bu da işe yaramadı. Son olarak, hem setResultCacheLifeSpan(0)
hem de setResultCacheLifeSpan(-1)
numaralarını aramayı denedim, ancak ikisi de aramayı fark etmedi.
Bu yöntemi her aradığımda farklı bir rasgele satırın seçilmesini istediğim için önbelleğe almayı nasıl engelleyeceğine dair herhangi bir bilgi var mı?
Düzenleme: Ben de clearResultCache()
aramaya çalıştım, ama bu sadece belirten bir hata neden sona erdi: "başlatılmamış Sonucu Önbellek sürücüsü".
Düzenleme 2: istenen gibi burada $query->getSqlQuery()
arayarak oluşturulan SQL var:
SELECT c.id AS c__id, c.name AS c__name, c.image_url AS c__image_url,
c.level AS c__level, c.created_at AS c__created_at, c.updated_at
AS c__updated_at, RANDOM() AS c__0 FROM cards c ORDER BY c__0 LIMIT 1
Merhaba Matt, $ query-> useResultCache (false) 'yi denediniz mi? – Darmen
Evet, sorduğum soruda yanlış kullanmayı denedim, ama bu da işe yaramadı. –
Sorgu önbelleğini neden devre dışı bırakalım? Sorgu aynı kalıyor! Sadece sonuç önbelleğini temizlemeniz yeterlidir. Belki de DBMS önbelleğinizi alıyorsunuz ... her istek için bir sorgulama yapılıp yapılmadığını görmek için sorguları kaydedebilirsiniz. – greg0ire