我正在使用带有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中缓存所有已加入实体的属性?请不要指向文档,因为我认为我已经学会了解决这个问题:*)
$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();
class User {
/**
* @ORM\ManyToMany(targetEntity="Property", mappedBy="users", cascade={"all"}, fetch="EAGER")
*/
protected $properties;
}
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;
}
答案 0 :(得分:4)
以下是与缓存问题相关的Doctrine JIRA问题,该问题最接近问题的描述:
<击> http://www.doctrine-project.org/jira/browse/DDC-217 击> https://github.com/doctrine/doctrine2/issues/2861
我认为这一点在Doctrine 2.2中已经确定