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;
}
Aquí está el problema de Doctrine JIRA relacionado con un problema de almacenamiento en caché que es el más cercano a la descripción del problema:
http://www.doctrine-project.org/jira/browse/DDC-217 https://github.com/doctrine/doctrine2/issues/2861
Mi opinión es que el punto está arreglado en Doctrine 2.2.