DesarrolloLibre

Desarrollo Web, Android y mucho más

14-02-2017

Doctrine es un mapeador de objetos mejor conocido como ORM por sus siglas para PHP que puede ser implementada en varios framework como CodeIgniter y Symfony; en donde mapeamos una clase con una tabla relacional en base de datos; por ejemplo, si tenemos una tabla llamada Persons:

$person = new Person(); 
$person>name = 'Juan'; 
$person>surname = 'Cruz';

Entonces en nuestra base de datos tenemos una tabla que contiene al menos dos campos concernientes el nombre y apellido de la persona; con las líneas de código anterior podemos crear un nuevo registro en base de datos sin realizar ningun insert ni nada por el estilo (aunque una vez creado el objeto y establecido sus valores es necesario hacer un 'persist' para realizar el guardado).

Doctrine ideal para base de datos complejas

Doctrine nos trae muchas ventajas sobre todo cuando trabajamos con sistemas medianamente grandes o sistemas grandes ya que no tenemos que emplear sentencias SQL para hacer todas nuestras relaciones, si no una variación del SQL llamado DQL (Doctrine Query Language) el cual nos trae un objeto con otros objetos anidados dependiendo de la relación de la misma (por ejemplo, si en la base de datos de la tabla Persons contiene una relación con la tabla Pets en donde una persona tiene una o más mascotas, entonces al realizar la solicitud de UN registro persona a través de Doctrine nos devolverá los objetos de la tabla Pets en conjunto con el objeto Persons).

Empezando con Doctrine y Symfony

Para poder trabajar con Doctrine primero tenemos que generar las entidades de Doctrine las cuales incluyen la definición de la tablas relacionales de nuestra base de datos configurada al momento de la creación del proyecto y también creado nuestro Bundle.

En la entidad de Doctrine encontraremos datos como las foreign keys, primary keys, tipos de datos, relaciones entre las tablas, etc; todo para que en Doctrine pueda vincular nuestras tablas en base de datos a las clases PHP con sus getters y setters que definiremos más adelante y a la cual podemos personalizar en mayor medida; para generar las entidades de Doctrine empleamos:

php bin/console doctrine:mapping:import BackendBundle yml

Cómo ves, debemos de crear las entidades dentro de un Bundle que creamos en una anterior entrada:

Los Bundle para modularizar nuestros proyectos en Symfony

Una vez realizado el paso anterior, se habrán generado tantos archivos como tablas en nuestra base de datos tengamos que cuentan con la siguiente estructura:

BackendBundle\Entity\Comments:
    type: entity
    table: comments
    indexes:
        fk_comment_video:
            columns:
                - video_id
        fk_comment_user:
            columns:
                - user_id
    id:
        id:
            type: integer
            nullable: false
            options:
                unsigned: false
            id: true
            generator:
                strategy: IDENTITY
    fields:
        body:
            type: text
            nullable: true
            length: 65535
            options:
                fixed: false
        createdAt:
            type: datetime
            nullable: true
            column: created_at
    manyToOne:
        user:
            targetEntity: Users
            cascade: {  }
            fetch: LAZY
            mappedBy: null
            inversedBy: null
            joinColumns:
                user_id:
                    referencedColumnName: id
            orphanRemoval: false
        video:
            targetEntity: Videos
            cascade: {  }
            fetch: LAZY
            mappedBy: null
            inversedBy: null
            joinColumns:
                video_id:
                    referencedColumnName: id
            orphanRemoval: false
    lifecycleCallbacks: {  }

Dichos archivos estarán ubicados en src/BackendBundle/Entity.

Si nosotros generamos tablas o relaciones o cambiamos simplemente la base de datos en el desarrollo, basta con ejecutar nuevamente el comando anterior.

Ahora generamos las entidades que en realidad son las que vamos a definir cada uno de los métodos y variables que están mapeadas con las columnas de las tablas que definan; las entidades en Symfony vienen siendo como los modelos en CodeIgniter; para generar las entidades empleamos el siguiente comando:

php bin/console doctrine:generate:entities BackendBundle
php app/console generate:doctrine:entity

Ya ha este punto estamos listos para empezar a trabajar de manera conjunta con los controladores, vistas y entidades en Symfony como veremos en posteriores entradas.


Publicidad

Give me for a beer!

Algunos recursos que te pueden interesar

TCPDF: clase Oper Source para generar PDF con PHP

TCPDF: clase Oper Source para generar PDF con PHP

Algunos artículos que te pueden interesar

Los Bundle para modularizar nuestros proyectos en Symfony

Los Bundle para modularizar nuestros proyectos en Symfony

Se explica en qué consiste y cómo emplear y crear los Bundle en Symfony.

Andrés Cruz 20-02-2017

Doctrine archivos de mapeo y entidades en Symfony

Doctrine archivos de mapeo y entidades en Symfony

Se explica como generar entidades a través de la bin/console en symfony mapeando desde la base de datos las relaciones.

Andrés Cruz 14-02-2017

¿Cómo instalar y configurar Symfony en Linux en dos pasos?

¿Cómo instalar y configurar Symfony en Linux en dos pasos?

Explicamos cómo instalar Symfony en Linux mediante el comando curl y configurarlo como comando del sistema, crear una aplicación e iniciar el servidor interno de PHP.

Andrés Cruz 04-02-2016