【发布时间】:2011-02-07 00:44:10
【问题描述】:
在我的 Symfony/Doctrine 应用程序中,我有一个按 RANDOM() 排序的查询。我多次调用相同的方法,但查询的结果似乎正在被缓存。
这是我的相关代码:
$query = $table->createQuery('p')
->select('p.*, RANDOM() as rnd')
->orderBy('rnd')
->limit(1)
->useQueryCache(null)
->useResultCache(null);
$result = $query->fetchOne();
不幸的是,无论我将null 传递给useQueryCache 和useResultCache,每次都返回相同的记录。我尝试使用false 而不是null,但这也不起作用。最后,我还尝试同时拨打setResultCacheLifeSpan(0) 和setResultCacheLifeSpan(-1),但都没有任何区别。
任何关于如何防止缓存的见解,因为我希望每次调用此方法时都选择不同的随机行?
编辑:我也尝试调用clearResultCache(),但最终导致错误提示:“结果缓存驱动程序未初始化”。
编辑2:根据要求,这是通过调用$query->getSqlQuery()生成的SQL:
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
【问题讨论】:
-
嗨,马特,你试过
$query->useResultCache(false)吗? -
是的,我在问题中提到我尝试使用 false,但这也没有用。
-
为什么要禁用查询缓存?查询保持不变!您只需要清除结果缓存。也许您正在使用 DBMS 缓存...您可以记录查询以查看是否针对每个请求进行了查询。
-
@greg0ire - 你说得对,我在这里的目的只是为了证明我尝试过的任何事情都没有奏效。不过,我会检查 DBMS 缓存,也许这就是为什么我每次都看到返回相同的记录。
-
奇数。您使用的是什么后端 DBMS?从 Doctrine 查询生成的实际 SQL 语句是什么? ($query->getSqlQuery())?如果直接在 DBMS 上运行会发生什么?我正在使用 MySQL 做几乎相同的事情,它似乎对我来说很好。
标签: caching symfony1 doctrine symfony-1.4 doctrine-1.2