Desarrollo rápido con PHP y Symfony (IV): El Modelo

2,738 views
2,619 views

Published on

Explicación de la capa de persistencia y el modelo dentro de Symfony implementado sobre Doctrine.

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,738
On SlideShare
0
From Embeds
0
Number of Embeds
19
Actions
Shares
0
Downloads
100
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Desarrollo rápido con PHP y Symfony (IV): El Modelo

  1. 1. Symfony David J. Brenes Martínez Desarrollo rápido con PHP y Symfony ORMs (IV) El Modelo Esquema y generación de clases Base de Datos Fichero de esquema Generación de David J. Brenes Martínez código Carga de Datos Curso de Extensión Universitaria Acceso a Desarrollo web avanzado Base de Universidad de Oviedo Datos Referencias, Créditos y 2010/03/22 Licencia
  2. 2. Encajando objetos y Base de Datos Symfony David J. Brenes Martínez ORMs Esquema y PHP es un lenguaje orientado a Objetos generación de clases Las Bases de datos más comunes son Relacionales Base de Datos Fichero de esquema Generación de Normalmente la traducción es sencilla código Carga de Algunos escenarios son más complicados Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  3. 3. Enlaces entre objetos Symfony David J. Brenes Martínez ORMs Esquema y Práctica comun en Orientacion a Objetos generación de clases En Base de Datos se traduce como un campo nuevo Base de Datos Fichero de esquema en una tabla Generación de código Carga de Recurrimos a Joins para enlazar los datos relacionados Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  4. 4. Herencia Symfony David J. Brenes Martínez ORMs Esquema y generación de clases Práctica comun en Orientacion a Objetos Base de Datos Fichero de esquema En Base de Datos la solución no es inmediata Generación de código Carga de Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  5. 5. ORMs Symfony David J. Brenes Martínez Herramientas que tratan de acercar la Orientación a ORMs Esquema y Objetos y las Bases de Datos generación de clases Nos esconden la ‘complejidad’ de ciertos problemas Base de Datos Fichero de esquema Automatizan trabajo Generación de código Dejamos de trabajar con tablas y Bases de Datos para Carga de Datos trabajar con objetos Acceso a Base de O casi. . . Datos Referencias, Créditos y Licencia
  6. 6. ORMs Symfony David J. Brenes Martínez ORMs Esquema y .NET: LinQ, nHibernate generación de clases Java: Hibernate, Spring, JPA Base de Datos Fichero de esquema Generación de Ruby: ActiveRecord código Carga de PHP: Propel, Doctrine Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  7. 7. ORMs en Symfony Symfony David J. Brenes Martínez ORMs Esquema y 2 alternativas: Propel, Doctrine generación de clases Hasta Symfony 1.2 Propel era el recomendado Base de Datos Fichero de esquema Generación de Últimas versiones recomiendan Doctrine código Carga de Núcleo del modelo Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  8. 8. databases.yml Symfony David J. Brenes Martínez ORMs Esquema y Fichero de configuracion de Base de Datos generación de clases Presente en directorio config del proyecto Base de Datos Fichero de esquema Generación de Configuras una base de datos por entorno código Carga de Escoges que tipo de Base de Datos usar Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  9. 9. Cambio de Base de Datos Symfony David J. Brenes Martínez ORMs Esquema y generación de Solo sería necesario cambiar databases.yml clases Base de Datos Podrías cambiar de host de Base de Datos e incluso de Fichero de esquema Generación de código SGBD (MySQL, PostgreSQL, Oracle, etc. . . ) Carga de Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  10. 10. schema.yml Symfony David J. Brenes Martínez ORMs Esquema y Es el fichero de configuración del modelo de datos. generación de clases En este fichero se define las tablas que va a haber en Base de Datos Fichero de esquema la Base de Datos y sus columnas Generación de código Carga de Se definen también características de los objetos Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  11. 11. Ejemplo Symfony David J. Coche : Brenes Martínez actAs : { Timestampable : ~ } ORMs columns : Esquema y id : generación de clases m a t r i c u l a : { type : s t r i n g (255) } Base de Datos conductor_id : { type : i n t e g e r } Fichero de esquema Generación de código relations : Carga de author : Datos onDelete : CASCADE Acceso a Base de l o c a l : conductor_id Datos foreign : id Referencias, Créditos y f o r e i g n A l i a s : Usuario Licencia
  12. 12. Atributos Symfony David J. Brenes Martínez ORMs Esquema y generación de Nombre clases Base de Datos Tipo de datos Fichero de esquema Generación de código Opciones adicionales (notnull, unique. . . ) Carga de Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  13. 13. Atributos Symfony David J. Brenes Martínez ORMs b o o l e a n _ f i e l d : { t y p e : boolean , d e f a u l t : 1 } Esquema y generación de clases Base de Datos string_field : s t r i n g (255) Fichero de esquema Generación de código detailed_field : Carga de Datos type : s t r i n g (255) Acceso a n o t n u l l : true Base de Datos Referencias, Créditos y Licencia
  14. 14. Relaciones Symfony David J. Brenes Martínez ORMs Esquema y generación de Indica cómo un objeto se relaciona con los demás clases Base de Datos Se definirán claves externas y triggers Fichero de esquema Generación de código En el modelo las relaciones serán transparentes Carga de Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  15. 15. Relaciones Symfony David J. Brenes Martínez ORMs Car : Esquema y relations : generación de clases driver : Base de Datos onDelete : CASCADE Fichero de esquema Generación de código local : driver_id Carga de foreign : id Datos c l a s s : User Acceso a Base de Datos Referencias, Créditos y Licencia
  16. 16. Tipos de relaciones Symfony David J. Brenes Martínez ORMs Esquema y generación de Los atributos type y foreign-type controlan la clases Base de Datos cardinalidad Fichero de esquema Generación de código Sus valores son one y many Carga de Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  17. 17. Relaciones many-to-many Symfony David J. Brenes Martínez ORMs Esquema y generación de clases En Base de datos se requiere una tabla extra Base de Datos Fichero de esquema En Schema.yml podemos definir la tabla intermedia Generación de código Carga de Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  18. 18. Relaciones many-to-many Symfony David J. Brenes Martínez Car : ORMs Relations : Esquema y generación de InsurancedDriver : clases Base de Datos c l a s s : User Fichero de esquema Generación de foreignAlias : InsuranceDrivers código local : car_id Carga de Datos foreign : driver_id Acceso a refClass : Insurance Base de Datos Referencias, Créditos y Licencia
  19. 19. Relaciones many-to-many Symfony David J. Insurance : Brenes Martínez columns : ORMs d r i v e r _ i d : { type : i n t e g e r } Esquema y car_id : { type : i n t e g e r } generación de clases p r i c e : { type : f l o a t } Base de Datos relations : Fichero de esquema Generación de código Driver : Carga de local : driver_id Datos foreign : id Acceso a Base de Car : Datos local : car_id Referencias, Créditos y foreign : id Licencia
  20. 20. Comportamientos Symfony David J. Brenes Martínez ORMs Definen un conjunto de atributos y un comportamiento Esquema y generación de ante ciertos eventos clases Base de Datos Es una manera de reutilizar aspectos comunes de Fichero de esquema Generación de modelos código Carga de Timestampable, Geographical, I18N, SoftDelete, Datos Sluggable. . . Acceso a Base de Datos Referencias, Créditos y Licencia
  21. 21. Comportamientos Symfony David J. Brenes Martínez ORMs Esquema y generación de Podemos definir nuestros propios cmportamientos clases Base de Datos Los coportamientos pueden recibir parámetros Fichero de esquema Generación de código Los comportamientos pueden anidarse Carga de Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  22. 22. Herencia Symfony David J. Brenes Martínez ORMs Es posible simular la herencia de la programación Esquema y generación de orientada a objetos clases Base de Datos Fichero de esquema Se aplican distintos esquemas para cada tipo de Generación de código herencia deseado Carga de Datos Tipos: Concrete, Simple y Column Agregation Acceso a Base de Datos Referencias, Créditos y Licencia
  23. 23. Herencia Concrete Symfony David J. Brenes Martínez ORMs Esquema y Se crea una tabla para la clase padre y una tabla para generación de clases cada clase hija Base de Datos Fichero de esquema Generación de Las tablas hijas tienen las mismas columnas que la código padre, más las columnas agregadas Carga de Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  24. 24. Herencia Simple Symfony David J. Brenes Martínez ORMs Esquema y Se crea solo una tabla para la clase padre generación de clases Las tablas padre tiene las columnas de la clase padre Base de Datos Fichero de esquema más las agregadas por las clases hijas Generación de código No se diferencia de qué tipo concreto es cada fila de la Carga de Datos Base de Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  25. 25. Herencia Column Agregation Symfony David J. Brenes Martínez ORMs Esquema y Se crea solo una tabla para la clase padre generación de clases Las tablas padre tiene las columnas de la clase padre Base de Datos Fichero de esquema más las agregadas por las clases hijas Generación de código Hay una columna adicional, que indica el tipo concreto Carga de Datos de cada fila Acceso a Base de Datos Referencias, Créditos y Licencia
  26. 26. El modelo Symfony David J. Brenes Martínez ORMs Esquema y generación de doctrine:build_model genera las clases a partir del clases Base de Datos fichero de esquema Fichero de esquema Generación de código Las clases quedan en lib/model Carga de Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  27. 27. Clases generadas Symfony David J. Brenes Martínez ORMs Esquema y Clase del modelo: Clase vacía que hereda de una generación de clases clase base Base de Datos Fichero de esquema Clase base: Clase con toda la informacion del modelo Generación de código Clase Table: Realiza las operaciones con la Base de Carga de Datos Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  28. 28. Clases generadas Symfony David J. Brenes Martínez ORMs Nunca debe hacerse referencia a la clase base ni Esquema y generación de modificarla clases Base de Datos Fichero de esquema La clase base se reescribe cada vez que construimos Generación de código el modelo Carga de Datos Podemos perder modificaciones Acceso a Base de Datos Referencias, Créditos y Licencia
  29. 29. El SQL Symfony David J. Brenes Martínez ORMs Esquema y Tarea doctrine:build-sql: genera el SQL del modelo generación de clases Base de Datos El SQL ha sido optimizado para la Base de Datos Fichero de esquema Generación de indicada en datbases.yml código Carga de También sufre las limitaciones de esa Base de Datos Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  30. 30. El SQL Symfony David J. Brenes Martínez ORMs Esquema y generación de Tarea doctrine:insert-sql: ejecuta el SQL sobre la base clases de datos Base de Datos Fichero de esquema Generación de Tarea doctrine:build-db: Crea la Base de Datos para el código modelo Carga de Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  31. 31. Zona de Administración Symfony David J. Brenes Martínez ORMs Esquema y Tarea doctrine:generate-admin: Genera un módulo de generación de clases administración para una clase del modelo Base de Datos Fichero de esquema Generación de Tarea doctrine:generate-module: Genera un módulo código CRUD para una clase del modelo Carga de Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  32. 32. Fixtures Symfony David J. Brenes Martínez ORMs Esquema y generación de Mecanismo de carga de datos clases Base de Datos Permite tener unos datos básicos para desarrollo o Fichero de esquema Generación de código testing Carga de Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  33. 33. Datos simples Symfony David J. Brenes Martínez User : ORMs user1 : Esquema y name : Lorem generación de clases user2 : Base de Datos Fichero de esquema name : Ipsum Generación de código user3 : Carga de name : Dolor Datos Acceso a user4 : Base de Datos name : sit Referencias, Créditos y Licencia
  34. 34. Relaciones Symfony David J. Brenes Martínez ORMs Car : Esquema y car1 : generación de clases m a t r i c u l a : 0000AAA Base de Datos D r i v e r : user_1 Fichero de esquema Generación de código car2 : Carga de m a t r i c u l a : 0000AAA Datos D r i v e r : user_3 Acceso a Base de Datos Referencias, Créditos y Licencia
  35. 35. Tareas de las fixtures Symfony David J. Brenes Martínez ORMs Esquema y generación de Tarea doctrine:data-load: Carga datos a la Base de clases Datos Base de Datos Fichero de esquema Generación de Tarea doctrine:data-dump: Descarga datos de la Base código de Datos Carga de Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  36. 36. Queries Symfony David J. Brenes Martínez ORMs Esquema y Ejecutamos consultas a la Base de Datos a través de generación de clases la clase Table. Base de Datos Fichero de esquema Generación de Le pedimos a Doctrine que nos devuelva un objeto código Table y construimos la consulta en ese objeto Carga de Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  37. 37. Queries Symfony David J. Brenes Martínez ORMs Esquema y generación de $query = D o c t r i n e : : g e t T a b l e ( ’ User ’ ) clases Base de Datos −>createQuery ( ’ u ’ ) ; Fichero de esquema Generación de $ r e s u l t s = $query−>execute ; código Carga de Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  38. 38. Queries Symfony David J. Brenes Martínez ORMs $query = D o c t r i n e : : g e t T a b l e ( ’ User ’ ) Esquema y generación de −>createQuery ( ’ u ’ ) clases Base de Datos −>where ( ’ u . name = ? ’ , ’ brenes ’ ) ; Fichero de esquema Generación de código Carga de $ r e s u l t s = $query−>execute ; Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  39. 39. Finders Symfony David J. Brenes Martínez ORMs Esquema y generación de Métodos que obtienen datos a través de valores de clases Base de Datos atributos Fichero de esquema Generación de código Nos ahorran el tener que crear queries Carga de Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  40. 40. Finders Symfony David J. Brenes Martínez ORMs $ r e s u l t = D o c t r i n e : : g e t T a b l e ( ’ User ’ ) Esquema y generación de −>findOneByName ( ’ brenes ’ ) ; clases Base de Datos Fichero de esquema Generación de $ r e s u l t s = D o c t r i n e : : g e t T a b l e ( ’ User ’ ) código Carga de −>findByName ( ’ brenes ’ ) ; Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  41. 41. Modificando datos Symfony David J. Brenes Martínez ORMs Esquema y Los objetos tienen atributos que corresponden a las generación de clases columnas Base de Datos Fichero de esquema Modificamos los atributos Generación de código Carga de Ejecutamos el método save() para grabar Datos Acceso a Base de Datos Referencias, Créditos y Licencia
  42. 42. Referencias Symfony David J. Brenes Martínez Symfony Project: www.symfony-project.org ORMs The Symfony Reference Book: http://www. Esquema y generación de symfony-project.org/reference/1_4/en/ clases Base de Datos Practical Symfony: Fichero de esquema Generación de código http://www.symfony-project.org/jobeet/1_ Carga de 4/Doctrine/en/ Datos Acceso a The Definitive Guide to Symfony: Base de Datos http://www.symfony-project.org/book/1_2/ Referencias, Créditos y Licencia
  43. 43. Licencia Symfony David J. Brenes Martínez Estas transparencias se publican bajo licencia Creative ORMs Commons y se pueden redistribuir o modificar bajo las Esquema y generación de siguientes condiciones: clases Base de Datos Se dé reconocimiento al autor de estas transparencias. Fichero de esquema Generación de No se use con propósitos comerciales. código Carga de Se distribuya con la misma licencia. Datos Acceso a Texto de la licencia: http: Base de Datos //creativecommons.org/licenses/by-nc-sa/3.0/ Referencias, Créditos y Licencia

×