Symfony2 + Doctrine2 не кэширует результаты объединенных объектов - программирование
Подтвердить что ты не робот

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

Я использую Symfony 2.0.10 с Doctrine 2.1 и имею довольно простой запрос (см. ниже), где я хочу кэшировать результаты с помощью APC (версия 3.1.7, с поддержкой 1 ГБ памяти) через useResultCache(true, 600) и сохранять режим гидратации как \Doctrine\ORM\Query::HYDRATE_OBJECT.

Проблема в том, что отношения Many-to-Many (Doctrine\ORM\PersistentCollection) не кэшируются, и каждый раз, когда основные результаты запроса кэшируются, объединенные объекты устанавливаются на null. Тот же запрос хорошо кэшируется в APC, когда я устанавливаю режим гидратации на \Doctrine\ORM\Query::HYDRATE_ARRAY, но это не приемлемое решение для меня, потому что я не могу повторить многие шаблоны для этого.

Пожалуйста, предложите, как я могу кэшировать все свойства объединенных объектов в 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;
}
4b9b3361