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

Ant*_*nko 17 apc symfony doctrine-orm

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

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

请建议如何在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();
Run Code Online (Sandbox Code Playgroud)

user.php的

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

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;
}
Run Code Online (Sandbox Code Playgroud)

Yve*_*tin 4

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

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

我的观点是,这一点已在原则 2.2 中得到解决