Trong ứng dụng Symfony/Doctrine của tôi, tôi có một truy vấn được đặt hàng bởi RANDOM(). Tôi gọi phương thức này giống nhau nhiều lần, nhưng có vẻ như kết quả của truy vấn đang được lưu trong bộ nhớ cache.Ngăn chặn bộ nhớ truy vấn của Doctrine trong Symfony
Đây là mã có liên quan của tôi:
$query = $table->createQuery('p')
->select('p.*, RANDOM() as rnd')
->orderBy('rnd')
->limit(1)
->useQueryCache(null)
->useResultCache(null);
$result = $query->fetchOne();
Thật không may, cùng một kỷ lục được trả mỗi lần, bất kể tôi đi qua null
cho cả useQueryCache
và useResultCache
. Tôi đã thử sử dụng false
thay vì null
, nhưng điều đó cũng không hoạt động. Cuối cùng, tôi cũng đã thử gọi cả hai setResultCacheLifeSpan(0)
và setResultCacheLifeSpan(-1)
, nhưng cả hai cuộc gọi đều không tạo ra sự khác biệt.
Bất kỳ thông tin chi tiết nào về cách ngăn chặn bộ nhớ đệm vì tôi muốn một hàng ngẫu nhiên khác nhau được chọn mỗi lần tôi gọi phương thức này?
Chỉnh sửa: Tôi cũng đã thử gọi clearResultCache()
, nhưng điều đó vừa kết thúc gây ra lỗi nêu rõ: "Trình điều khiển kết quả Cache không được khởi tạo".
Chỉnh sửa 2: Theo yêu cầu, đây là SQL được tạo ra bằng cách gọi $query->getSqlQuery()
:
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
Xin chào Matt, bạn đã thử '$ query-> useResultCache (false)'? – Darmen
Vâng, tôi đã đề cập trong câu hỏi của mình rằng tôi đã thử sử dụng sai, nhưng điều đó cũng không có tác dụng. –
Tại sao vô hiệu hóa bộ nhớ cache truy vấn? Truy vấn vẫn giữ nguyên! Bạn chỉ cần xóa bộ nhớ cache kết quả. Có lẽ bạn đang có bộ nhớ cache DBMS của bạn ... bạn có thể đăng nhập truy vấn để xem một truy vấn được thực hiện cho mỗi yêu cầu. – greg0ire