Doctrine2结果缓存ID

时间:2014-12-15 21:54:21

标签: php caching doctrine-orm

我第一次在项目上实施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();

提前谢谢: - )

1 个答案:

答案 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:对象,特定的特定图像,特定的电子邮件等。