Instalar y configurar Doctrine sin Symfony: Mapeo inverso, etc.
A continuación verás los pasos necesario para instalar, configurar y hacer ingeniería inversa para obtener los datos de una base de datos existene.
Debian 8.6 PHP 5.6. MySQL 5.7. Composer 1.2.1 Doctrine 2.4
Para la instalación de los elementos necesarios vamos a usar composer.
Vamos a usar yaml para generar el esquema de la base de datos que vamos a necesitar.
Creamos una fichero llamado composer.json
en la raíz de nuestro proyecto.
"require": {
"doctrine/orm": "2.4.*",
"symfony/yaml": "2.*"
},
"autoload": {
"psr-0": {"": "config/yml/"},
"psr-0": {"": "config/generated-entities/"}
}
En el campo require incluímos symfony/yaml
para poder generar el esquema
de la base de datos como un fichero .yml, podríamos generarlo como .xml o php anotado.
En el autoload agregamos las carpetas que usaremos para albergar nuestros ficheros de mapeo y entidades.
Una vez tengamos el fichero creado ejecutamos un composer install
para que instale
todos los elementos necesarios.
Vamos a necesitar 2 ficheros:
A continuación puedes ver los dos ficheros completos:
<?php
// cli-config.php
use Doctrine\ORM\Tools\Console\ConsoleRunner;
// replace with file to your own project bootstrap
require_once 'doctrine/bootstrap.php';
return ConsoleRunner::createHelperSet($entityManager);
<?php
// bootstrap.php
// Include Composer Autoload (relative to project root).
$curr_dir = dirname(__FILE__);
require_once $curr_dir . "/../vendor/autoload.php";
use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;
$paths = array($curr_dir . "/../config/yml");
$isDevMode = false;
require_once dirname(__FILE__) . '/../models/settings.php';
$connectionOptions = array(
'driver' => 'pdo_mysql',
'host' => $db_host,
'port' => $db_port,
'user' => $db_user,
'password' => $db_pass,
'dbname' => $db_name,
'charset' => 'UTF8',
'mapping_types' => array ('enum' => 'string')
);
$config = Setup::createYAMLMetadataConfiguration($paths, $isDevMode);
$entityManager = EntityManager::create($connectionOptions, $config);
$platform = $entityManager->getConnection()->getDatabasePlatform();
//ojo aqui: al no existir enum como un tipo de dato en doctrine, lo enlazamos a mano
$platform->registerDoctrineTypeMapping('enum', 'string');
?>
Ahora creamos las carpetas necesarias dentro de la raíz de nuestro proyecto:
mkdir -p config/yml
mkdir doctrine
Como vamos a usar yml, convertimos la Base de Datos (bd) a un esquema .yml:
vendor/bin/doctrine orm:convert-mapping --from-database yml config/yml/
Este comando nos generará un fichero .dcm.yml por cada tabla de la base de datos
dentro de config/yml
.
Tiene ciertas limitaciones en tablas relacionales, sobre todo de muchos a muchos
y no funciona del todo correcto cuando enlazamos a otras base de datos. Puede
requerir configuración manual en estos casos.
Por cada tabla ahora vamos a generar una clase que emplearemos para interactuar con la base de datos, el famoso CRUD.
vendor/bin/doctrine orm:generate-entities config/generated-entities/
Esto nos debió generar las entidades dentro de config/generated-entities
.
En construcción.
Ejemplo documentación oficial