Symfony2 + Doctrine2不缓存已连接实体的结果

时间:2011-12-25 12:41:09

标签: symfony doctrine-orm apc

我正在使用带有Doctrine 2.1的Symfony 2.0.10并且具有相当简单的查询(见下文),我希望通过useResultCache(true, 600)使用APC(版本3.1.7,为其启用1GB内存)来缓存结果并将保湿模式保持为\Doctrine\ORM\Query::HYDRATE_OBJECT

问题是多对多关系(Doctrine\ORM\PersistentCollection)没有被缓存,每次缓存主查询结果时,连接的实体都被设置为null。当我将水合模式设置为\Doctrine\ORM\Query::HYDRATE_ARRAY时,相同的查询在APC中缓存得很好,但对我来说这是不可接受的解决方案,因为我无法重做许多模板来实现此目的。

请建议如何在APC中缓存所有已加入实体的属性?请不要指向文档,因为我认为我已经学会了解决这个问题:*)

CODE:

$property = $em
->createQueryBuilder()
->select('p,u')
->from('MyBundle:Property', 'p')
->leftJoin('p.users', 'u')
->where('p.id in (:id)')
->setParameter('id', 123)
->getQuery()
->useResultCache(true, 60)
->setHydrationMode(\Doctrine\ORM\Query::HYDRATE_OBJECT)
->getResult();

user.php的

class User {
    /**
     * @ORM\ManyToMany(targetEntity="Property", mappedBy="users", cascade={"all"}, fetch="EAGER")
     */
     protected $properties;
}

Property.php

class Property {
    /**
     * @ORM\ManyToMany(targetEntity="User", inversedBy="properties", cascade={"all"}, fetch="EAGER")
     * @ORM\JoinTable(name="user_property",
     *      joinColumns={@ORM\JoinColumn(name="property_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}
     * )
     */
     protected $users;
}

1 个答案:

答案 0 :(得分:4)

以下是与缓存问题相关的Doctrine JIRA问题,该问题最接近问题的描述:

<击> http://www.doctrine-project.org/jira/browse/DDC-217 https://github.com/doctrine/doctrine2/issues/2861

我认为这一点在Doctrine 2.2中已经确定