Desarrollo rápido con PHP y Symfony (IV): El Modelo
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 2,606 views

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

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

Statistics

Views

Total Views
2,606
Views on SlideShare
2,591
Embed Views
15

Actions

Likes
0
Downloads
86
Comments
0

1 Embed 15

http://www.sfexception.com 15

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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