Día trece del calendario de symfony: Etiquetas ============================================== Anteriormente en symfony ------------------------ La aplicación askeet puede mostrar datos a través de una página web, un feed RSS, o email. Se puede formular preguntas y responderlas. Pero la organización de las preguntas está por desarrollar. Organizar las preguntas en categorías y subcategorías terminaría siendo una estructura en árbol inextricable (muy intrincada y confusa), con cientos de ramas y sin una manera sencilla de saber en qué rama está la pregunta que estás buscando. No obstante, las aplicaciones web 2.0 vienen con una nueva forma de organizar los ítems: etiquetas. Las etiquetas son palabras, igual que las categorías. Pero la diferencia es que no hay una jerarquía de etiquetas, y que un ítem puede tener varias etiquetas. Mientras que buscar un gato con categorías podría resultar engorroso (animal/mamífero/cuadrúpedo/felino/, u otros misteriosos nombres de categorías), es muy fácil hacerlo con etiquetas (mascota+bonita). Incluye esta característica para que todos los usuarios añadan etiquetas a las preguntas, y tendrás el famoso concepto de [folksonomía][1]. ¿Lo adivinas? Eso es exactamente lo que vamos a hacer con las preguntas de askeet. Nos llevará algún tiempo (hoy y mañana), pero el resultado merece la pena. Además será la ocasión para mostrar cómo hacer consultas SQL complejas a la base de datos usando una conexión Creole. Comencemos. La clase `QuestionTag` ---------------------- Hay varias formas de implementar etiquetas. Nosotros elegimos añadir una tabla `QuestionTag` con la siguiente estructura:  Cuando un usuario etiqueta una pregunta, se crea un nuevo registro en la tabla `question_tag`, enlazada a las tablas `user` y `question`. Hay dos versiones de la etiqueta insertada: la introducida por el usuario, y una versión normalizada (en minúsculas, sin caracteres especiales) usada para la indexación. ### Actualización del esquema Como de costumbre, añadir una tabla a un proyecto de symfony se hace añadiendo al final del archivo `schema.xml` su definición Propel: [xml] ...