preupdate prepersist postload example event symfony doctrine-orm apc

prepersist - symfony listener vs subscriber



Symfony2+Doctrine2 no almacena en caché los resultados de las entidades unidas. (1)

Estoy usando Symfony 2.0.10 con Doctrine 2.1 y tengo una consulta bastante simple (ver más abajo), donde quiero guardar en caché los resultados con APC (versión 3.1.7, habilitada 1 GB de memoria para ella) a través de useResultCache(true, 600) y modo de hidratación como /Doctrine/ORM/Query::HYDRATE_OBJECT .

El problema es que las relaciones de muchos a muchos ( Doctrine/ORM/PersistentCollection ) no se almacenan en caché y cada vez que los resultados de la consulta principal se almacenan en caché, las entidades unidas se establecen en null . La misma consulta se almacena bien en la caché en APC cuando configuro el modo de hidratación en /Doctrine/ORM/Query::HYDRATE_ARRAY , pero no es una solución aceptable para mí, porque no puedo rehacer muchas plantillas para que esto funcione.

Por favor, sugiera cómo puedo almacenar en caché todas las propiedades de las entidades unidas en APC? Por favor, no apunte a la documentación, porque creo que lo aprendí de memoria tratando de resolver este problema :)

CÓDIGO:

$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();

Usuario.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; }