我正在使用Symfony 2.0.10与Doctrine 2.1,有一个相当简单的查询(如下所示),我想通过
问题是多对多关系(
请建议如何在APC中缓存所有连接实体的属性? 请不要指向文档,因为我认为我已经背得滚瓜烂熟,尝试解决此问题:)
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;
}