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
actAs
del 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_Template
que 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
Post
para añadir el comportamiento
CountCache
mediante
actAs
:
Ahora que el modelo
Post
hace 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
BasePost
en
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
Post
para su relación
Thread
. De esta forma, el número de posts de cualquier
Thread
se almacena en una columna llamada
num_posts
. A continuación, modifica el esquema YAML para definir las opciones auxiliares del comportamiento:
Ahora el modelo
Thread
dispone de una columna llamada
num_posts
y 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.