En esta sección se explica cómo crear un nuevo comportamiento utilizando Doctrine doce. El ejemplo usado permitirá mantener una cache del númerode relaciones de un registro para no tener que hacer esa consulta todo el rato.
La funcionalidad es realmente simple: en todas y cada una de las relaciones en las que quierascontrolar su número, el comportamiento añade una columna a su modelo para almacenarun contador.
Inicialmente se marcha a emplear el siguiente esquema. Más adelante se modificapara añadir la definición
actAsdel comportamiento que se va a crear:
Seguidamente se edifican todas las clases del esquema:
En primer lugar se crea la clase básica de tipo
Doctrine_Templateque serála responsable de añadir las columnas al modelo que guardará los contadores.
Añade la siguiente clase en cualquier directorio
lib/del proyecto a fin de que symfony pueda cargarla de forma automática:
A continuación se altera el modelo
Postpara añadir el comportamiento
CountCachemediante
actAs:
Ahora que el modelo
Posthace empleo del comportamiento
CountCache, sufuncionamiento es el siguiente: cuando se instancia la información de mapeo deun modelo, se invocan los métodos
setTableDefinition()y
setUp()de todossus comportamientos asociados. Esto es lo mismo que sucede con la clase
BasePosten
lib/model/doctrine/base/BasePost.class.php. Esta característicapermite añadir elementos de todo tipo a un modelo, como columnas, relaciones,eventos, etc.
Ahora que está más claro su funcionamiento interno, se añade toda la lógicainterna del comportamiento
CountCache:
El código superior añade columnas para sostener los contadores de los modelosrelacionados. En consecuencia, en este caso se añade el comportamiento en el modelo
Postpara su relación
Thread. De esta forma, el número de posts de cualquier
Threadse almacena en una columna llamada
num_posts. A continuación, modifica el esquema YAML para definir las opciones auxiliares del comportamiento:
Ahora el modelo
Threaddispone de una columna llamada
num_postsy que guardará de forma actualizada el número de posts que tiene cada hilo de discusión.
El siguiente paso consiste en crear un
event listenerde registro que será elque se ocupe de mantener actualizado el contador cuando se creen nuevosregistros y cuando se borren registros de forma individual o bien en bloque.