我第一次在项目上实施Doctrine2结果缓存,我已经完成了一些测试,但我仍然对设置缓存ID有些怀疑。
假设我有这样的查询:
$qb->select('o.img,o.title,o.comment')
->from('MyBundle:Object', 'o')
->where('o.id = :id')
->setParameter('id', $id);
$result = $qb->getQuery()
->getScalarResult();
我有一个更改参数(id
):正确缓存结果的代码是正确的(如果结果缓存自动管理带参数的查询,则为idk)?
首先:(我想这个)
$result = $qb->getQuery()
->useResultCache(true,1800,'my_object_' . $id)
->getScalarResult();
第二
$result = $qb->getQuery()
->useResultCache(true,1800,'my_object')
->getScalarResult();
提前谢谢: - )
答案 0 :(得分:0)
实际上他们两个都应该工作。但是,区别在于标识存储在缓存中的数据的名称。
每个缓存的值都具有以下结构:
array(
"raw sql with parameters",
array(
"result 1",
"result 2",
"result 3",
),
);
然后,
选项1 :将缓存应用程序中加载的第一个MyBundle:Object
对象的sql和数据。因此,如果第二个对象选择具有不同的id,则doctrine将返回先前的缓存对象。
如果要缓存每个请求中没有更改的对象,可以使用此代码。一些示例:网页,记录的用户信息,计数器等
选项2 :将根据其id缓存每个MyBundle:Object
的sql和数据。如果您打算加载分离的对象,则可以使用此代码。一些exaples:特定的MyBundle:对象,特定的特定图像,特定的电子邮件等。