SlideShare una empresa de Scribd logo
O modelo.
Doctrine2
Nacho Martín
El modelo
 en MVC
Doctrine2 sf2Vigo
Smart User Interface
 <html>
 <head>
 <title>Mi primera web dinámica</title>
 </head>
 <body>
 <blink><?php $visitas = consulta_SQL('visitas');
     echo $visitas;
     guarda_SQL($visitas + 1);
     ?></blink>
 </body>
 </html>
Doctrine2 sf2Vigo
Vista

Controlador

  Modelo
Vista
 Controlador



Modelo
“
Responsable de representar conceptos sobre
la situación del dominio y sus reglas.
Los detalles de almacenamiento se delegan
en la infraestructura.
                                          “
       Eric Evans, Domain Driven Design
“
Responsable de representar conceptos sobre
la situación del dominio y sus reglas.
Los detalles de almacenamiento se delegan
en la infraestructura.
Esta capa es el corazón del software.
                                          “
       Eric Evans, Domain Driven Design
“
                                  “
Symfony2 va sobre proporcionar herramientas
para el Controlador y la Vista, pero no para
el Modelo.
                      Fabien Potencier
Doctrine2 sf2Vigo
Doctrine
Puente entre el modelo
relacional y los objetos         Doctrine ORM
API de la capa de
abstracción de la BD             Doctrine DBAL
API interfaz para distintos
drivers de BD                           PDO

           MS SQL Server, Firebird/Interbase, IBM, INFORMIX,
           MySQL, Oracle, ODBC y DB2, PostgreSQL, SQLite
DBAL
# app/config/config.yml
doctrine:
    dbal:
        driver:     pdo_mysql
        dbname:     Symfony2
        user:       root
        password:   null
        charset:    UTF8
$conn = $this->get('database_connection');
$users = $conn->fetchAll('SELECT * FROM users');
<?php
$conn = $this->get('database_connection');
$queryBuilder = $conn->createQueryBuilder();
$users = $queryBuilder
         ->select('u.id')
         ->addSelect('p.id')
         ->from('users', 'u')
         ->leftJoin('u', 'phonenumbers', 'u.id = p.user_id')
         ->setFirstResult(30)
         ->setMaxResults(25)
         ->execute();
ORM
ActiveRecord
 (Doctrine 1)

         Post
id
título
autor
tags
save()
delete()
...
ActiveRecord     DataMapper
 (Doctrine 1)    (Doctrine 2)

         Post            Post
id              id
título          título
autor           autor
tags            tags
save()
delete()
...
Record
Entidad
class Post
{
    private   $id;
    private   $titulo;
    private   $autor;
    private   $tags;
}
class Post
{

    private $id;

    private $titulo;

    private $autor;

    private $tags;
}
/**
* @ORMTable(name="post")
* @ORMEntity
*/
class Post
{
/**
* @ORMId
* @ORMColumn(type="integer")
* @ORMGeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
 * @ORMColumn(type="string")
 */
private $titulo;
string

integer     date

 float       time

smallint   datetime

 bigint      text

boolean     object

decimal     array
/**
 * @ORMManyToOne(targetEntity="User",
 *    inversedBy="posts", cascade={"remove"})
 * @ORMJoinColumn(name="user_id", referencedColumnName="id")
 */
private $autor;
/**
 * @ORMManyToMany(targetEntity="Tag", inversedBy="Posts")
 * @ORMJoinTable(name="post_tag",
 *      joinColumns={@ORMJoinColumn(name="tag_id",
 *          referencedColumnName="id")},
 *      inverseJoinColumns={@ORMJoinColumn(name="post_id",
 *          referencedColumnName="id")}
 * )
 */
private $tags;
php app/console doctrine:generate:entities AcmeStoreBundle
$user = new ForumUser();
$user->setName('Nacho');
$name = $user->getName();
$comment = new Comment();

$user->addComment($comment);
Entity Manager
Doctrine2 sf2Vigo
$em = $this->getDoctrine()->getEntityManager();

$dql = "SELECT t FROM AcmeMiBundleEntityTask t";
$dql .= " WHERE t.proyecto = :proyecto";
$dql .= " AND t.posicion > :minpos";
$dql .= "ORDER BY t.prioridad"
$query = $em->createQuery($dql);

$query->setParameters(array(
      'project' => $project,
      'minpos' => 10,
));

$tareas = $query->getResult();
$query = $em->createQuery('SELECT u, a FROM ForumUser u JOIN u.avatar a');
$users = $query->getResult(); //Array
echo $users[0]->getAvatar()->getFilename();
$qb = $em->createQueryBuilder()
     ->where('p.precio > :precio')
     ->setParameter('precio', '19.99')
     ->orderBy('p.precio', 'ASC')
     ->getQuery();

$productos = $query->getResult();
Query#getResult()
Query#getSingleResult()          BD
Query#getOneOrNullResult()
Query#getArrayResult()
Query#getScalarResult()
Query#getSingleScalarResult()   Post

                          Tag1         Tag2
Repositorio
“
                                      “
Proporciona la ilusión de tener una colección
en memoria de todos los objetos de un tipo.
Permite acceso mediante una interfaz común.
           Eric Evans, Domain Driven Design
$producto = $repository->find($id);

$producto = $repository->findOneByNombre('Thermomix');

$productos = $repository->findAll();

$productos = $repository->findByPrecio(19.99);

$productos = $repository->createQueryBuilder('p')->...
<?php
/**
  * ABBundleEntity
 *
 * @ORMTable(name="ponencia")
 * @ORMEntity(repositoryClass="ABBundleEntityPonenciaRepository")
 */
class Ponencia
{
DDD
Migraciones



    BD




 Definición
Migraciones



    BD



              Comparación



 Definición
Migraciones



    BD



              Comparación



 Definición                 Diff
Migraciones



    BD



              Comparación



 Definición                 Diff
Migraciones



    BD                      BD'



              Comparación



 Definición                 Diff
php app/console doctrine:migrations:diff


php app/console doctrine:migrations:migrate
La familia Doctrine
MongoDB ODM
CouchDB ODM
PHPCR ODM
Doctrine Search
Vida más allá
?
Qué hay del rendimiento?
Doctrine2 sf2Vigo
Doctrine2 sf2Vigo
Doctrine2 sf2Vigo
Patrón Polish Rider
Doctrine2 sf2Vigo
Doctrine2 sf2Vigo
Patrón Balkan Partisan
¿Preguntas?
Gracias
 nitram.ohcan@gmail.com
 @nacmartin


      limenius.com

Más contenido relacionado

PDF
Intro aplicaciones web con php
DOCX
Programa que almacena en una base de datos las características de un carro co...
ODP
Symfony2 - ACL
PDF
Clase 14 doctrine - subir archivos
PDF
Silex, desarrollo web ágil y profesional con PHP
PDF
Funciones con ficheros
PPTX
Jquery parte 1
PDF
Jquery
Intro aplicaciones web con php
Programa que almacena en una base de datos las características de un carro co...
Symfony2 - ACL
Clase 14 doctrine - subir archivos
Silex, desarrollo web ágil y profesional con PHP
Funciones con ficheros
Jquery parte 1
Jquery

La actualidad más candente (20)

RTF
Sumaoctal
PDF
Desarrollo código mantenible en WordPress utilizando Symfony
PPT
Gustavo php
PDF
89 Php. Tablas Inno Db
PDF
Mantenimiento de Usuarios usando MVC ver1
PDF
Informe chabot
PDF
Introduccion a Doctrine 2 ORM
PDF
Cómo domar SonataAdminBundle
DOCX
Trabajo array
PDF
jQuery 1.3 Eghost Julio2009
PPT
PDF
MADs about Drupal: Programación de entities para D7
PDF
Symfony parte 15 Consultas y Migración
ODP
Introducción a JQuery
PDF
WordCamp Cantabria - Código mantenible con WordPress
DOCX
Arreglos en C++
PDF
jQuery
PPT
Funcionesphpmysql
DOC
Php
PDF
Java Applet:::Pelota que rebota en un recinto.
Sumaoctal
Desarrollo código mantenible en WordPress utilizando Symfony
Gustavo php
89 Php. Tablas Inno Db
Mantenimiento de Usuarios usando MVC ver1
Informe chabot
Introduccion a Doctrine 2 ORM
Cómo domar SonataAdminBundle
Trabajo array
jQuery 1.3 Eghost Julio2009
MADs about Drupal: Programación de entities para D7
Symfony parte 15 Consultas y Migración
Introducción a JQuery
WordCamp Cantabria - Código mantenible con WordPress
Arreglos en C++
jQuery
Funcionesphpmysql
Php
Java Applet:::Pelota que rebota en un recinto.

Destacado (19)

PDF
How Symfony Changed My Life
PDF
Symfony Guard Authentication: Fun with API Token, Social Login, JWT and more
PDF
Keeping the frontend under control with Symfony and Webpack
PDF
Guard Authentication: Powerful, Beautiful Security
PDF
Symfony: Your Next Microframework (SymfonyCon 2015)
PDF
Symfony & Javascript. Combining the best of two worlds
PDF
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
PPTX
React + Redux Introduction
PDF
React JS and why it's awesome
PDF
Integrating React.js Into a PHP Application
PDF
Introduction to Redux
PDF
Creando Productos SaaS
PDF
Refactorizando Pccomponentes.com con Symfony
PDF
Integrando React.js en aplicaciones Symfony (deSymfony 2016)
PDF
You Got React.js in My PHP
PDF
High Quality Symfony Bundles tutorial - Dutch PHP Conference 2014
PDF
Adding Realtime to your Projects
ODP
PHP + Node.js
PDF
Integrating Node.js with PHP
How Symfony Changed My Life
Symfony Guard Authentication: Fun with API Token, Social Login, JWT and more
Keeping the frontend under control with Symfony and Webpack
Guard Authentication: Powerful, Beautiful Security
Symfony: Your Next Microframework (SymfonyCon 2015)
Symfony & Javascript. Combining the best of two worlds
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
React + Redux Introduction
React JS and why it's awesome
Integrating React.js Into a PHP Application
Introduction to Redux
Creando Productos SaaS
Refactorizando Pccomponentes.com con Symfony
Integrando React.js en aplicaciones Symfony (deSymfony 2016)
You Got React.js in My PHP
High Quality Symfony Bundles tutorial - Dutch PHP Conference 2014
Adding Realtime to your Projects
PHP + Node.js
Integrating Node.js with PHP

Similar a Doctrine2 sf2Vigo (20)

PDF
Inyecciones sql para todos
PDF
Drupal7 para desarrolladores
PDF
Presentacion YII
PPTX
Entidades en drupal 8
PPTX
PowerShell para administradores
PPTX
Fundamento de poo en php
PDF
Clase 14 bundles útiles
PDF
Seminario mongo db springdata 10-11-2011
DOCX
LARAVEL documentación y comandos para programar rapido
PDF
Entidades en drupal 8
PDF
ORM Doctrine
PPT
Php Bitter Sweet Symfony!
PDF
Javascript Básico
PPT
Desarrollo android almacenamiento de datos
PDF
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasos
KEY
Introducción a Flask
KEY
Introducción a DJango
PPTX
P2C2 Introducción a JEE5
PDF
Aplicación abc. asp net mvc 3
Inyecciones sql para todos
Drupal7 para desarrolladores
Presentacion YII
Entidades en drupal 8
PowerShell para administradores
Fundamento de poo en php
Clase 14 bundles útiles
Seminario mongo db springdata 10-11-2011
LARAVEL documentación y comandos para programar rapido
Entidades en drupal 8
ORM Doctrine
Php Bitter Sweet Symfony!
Javascript Básico
Desarrollo android almacenamiento de datos
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasos
Introducción a Flask
Introducción a DJango
P2C2 Introducción a JEE5
Aplicación abc. asp net mvc 3

Más de Ignacio Martín (13)

PDF
Elixir/OTP for PHP developers
PDF
Introduction to React Native Workshop
PDF
Server side rendering with React and Symfony
PDF
Symfony 4 Workshop - Limenius
PDF
Server Side Rendering of JavaScript in PHP
PDF
Extending Redux in the Server Side
PDF
Redux Sagas - React Alicante
PDF
React Native Workshop - React Alicante
PDF
Asegurando APIs en Symfony con JWT
PDF
Redux saga: managing your side effects. Also: generators in es6
PDF
Integrating React.js with PHP projects
PDF
Symfony 2 CMF
PDF
Presentacion git
Elixir/OTP for PHP developers
Introduction to React Native Workshop
Server side rendering with React and Symfony
Symfony 4 Workshop - Limenius
Server Side Rendering of JavaScript in PHP
Extending Redux in the Server Side
Redux Sagas - React Alicante
React Native Workshop - React Alicante
Asegurando APIs en Symfony con JWT
Redux saga: managing your side effects. Also: generators in es6
Integrating React.js with PHP projects
Symfony 2 CMF
Presentacion git

Último (20)

PPTX
Administración se srevidores de apliaciones
PDF
La electricidad y la electrónica .pdf n
PDF
clase auditoria informatica 2025.........
PDF
Estrategia de apoyo tecnología miguel angel solis
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PPTX
Presentación de Redes de Datos modelo osi
PPT
Que son las redes de computadores y sus partes
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PPTX
Introduccion a servidores de Aplicaciones (1).pptx
PPTX
Presentación PASANTIAS AuditorioOO..pptx
PDF
taller de informática - LEY DE OHM
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
PDF
SAP Transportation Management para LSP, TM140 Col18
PDF
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
PPTX
Yogurt de tocosh (1).pptx preparacion receta
PDF
Temas y subtemas de las fichas 1 y 2.pdf
DOCX
Trabajo colaborativo Grupo #2.docxmmuhhlk
PDF
Aristoteles-y-su-forma-de-entender-el-conocimiento-y-las-personas.pdf
PPTX
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
PDF
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
Administración se srevidores de apliaciones
La electricidad y la electrónica .pdf n
clase auditoria informatica 2025.........
Estrategia de apoyo tecnología miguel angel solis
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
Presentación de Redes de Datos modelo osi
Que son las redes de computadores y sus partes
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
Introduccion a servidores de Aplicaciones (1).pptx
Presentación PASANTIAS AuditorioOO..pptx
taller de informática - LEY DE OHM
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
SAP Transportation Management para LSP, TM140 Col18
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
Yogurt de tocosh (1).pptx preparacion receta
Temas y subtemas de las fichas 1 y 2.pdf
Trabajo colaborativo Grupo #2.docxmmuhhlk
Aristoteles-y-su-forma-de-entender-el-conocimiento-y-las-personas.pdf
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...

Doctrine2 sf2Vigo