Symfony2 + Doctrine2 не кэширует результаты объединенных сущностей - PullRequest
17 голосов
/ 25 декабря 2011

Я использую 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;
}

1 Ответ

4 голосов
/ 15 февраля 2012

Вот проблема Doctrine JIRA, связанная с проблемой кэширования, которая наиболее близка к описанию проблемы:

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

Мое мнение таково, что точка зрения зафиксирована в Доктрине 2.2

...