Symfony2 + Doctrine2 не кэширует результаты объединенных сущностей

Я использую Symfony 2.0.10 с Doctrine 2.1 и имею довольно простой запрос (см. ниже), где я хочу кэшировать результаты с помощью APC (версия 3.1.7, включил для него 1 ГБ памяти) через 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();

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;
}
17
задан Anton Babenko 10 February 2012 в 14:34
поделиться