symfony ORM doctrine mapeo de base datos

1) configurar datos de conexion

app/config/parameters.yml

# This file is auto-generated during the composer install
parameters:
    database_host: localhost
    database_port: 3306
    database_name: symfoweb
    database_user: root
    database_password:



2) configurar orm doctrine 

app/config/config.yml

# Doctrine Configuration
doctrine:
    dbal:
        driver:   pdo_mysql
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  utf8mb4
        default_table_options:
            charset: utf8mb4
            collate: utf8mb4_unicode_ci
  
3) creamos la base de datos symfoweb con las siguientes tablas

CREATE TABLE `blog_post` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `title` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `content` longtext COLLATE utf8_unicode_ci NOT NULL,
  `created_at` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE `blog_comment` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `post_id` bigint(20) NOT NULL,
  `author` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `content` longtext COLLATE utf8_unicode_ci NOT NULL,
  `created_at` datetime NOT NULL,
  PRIMARY KEY (`id`),
  KEY `blog_comment_post_id_idx` (`post_id`),
  CONSTRAINT `blog_post_id` FOREIGN KEY (`post_id`) REFERENCES `blog_post` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

4) vamos a trabajar en un bundle nuevo

vamos a crearlo desde consola situados en la base del proyecto, ejecutamos:

php app/console generate:bundle --namespace=Acme/Bundle/BlogBundle --no-interaction



lo que nos generara la siguiente estructura




Recordar agregarlo en app/AppKernel.php

en class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = [
                  ...
                 new Acme\Bundle\BlogBundle\AcmeBundleBlogBundle(),


5) Crear los archivo  de metada que describen las entidades basadas en las tablas

php bin/console doctrine:mapping:import --force AcmeBundleBlogBundle xml
(si quisieramos generar los archivos de tipo Yaml el ultimo parametro debe ser yml)

lo que generara 2 archivos:
src\Acme\Bundle\BlogBundle\Resources\config\doctrine\BlogComment.orm.xml
src\Acme\Bundle\BlogBundle\Resources\config\doctrine\BlogPost.orm.xml

6) creamos las entidades

ejecutamos
 php bin/console doctrine:generate:entities AcmeBundleBlogBundle

lo que generara 2 archivos:
src\Acme\Bundle\BlogBundle\Entity\BlogComment.php
src\Acme\Bundle\BlogBundle\Entity\BlogPost.php


7) configuramos el routeo.

en config/routing.yml

acme_bundle_blog:
    resource: "@AcmeBundleBlogBundle/Controller/"
    type:     annotation
    prefix:   /blog

probar:

http://symfoweb.local/blog

deberia mostrar en el browser:

Hello World!

8) crear un action para crear un registro en la tabla Post

No hay comentarios:

Publicar un comentario

linux ubuntu mint actualizar chrome

 desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable