[DoctrineBundle] Adding doctrine:import-mapping command to allow you to easily import the mapping information from an existing database connection to a bundle
This commit is contained in:
parent
0472d0f0e2
commit
1be4ff9095
@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
namespace Symfony\Framework\DoctrineBundle\Command;
|
||||
|
||||
use Symfony\Components\Console\Input\InputArgument;
|
||||
use Symfony\Components\Console\Input\InputOption;
|
||||
use Symfony\Components\Console\Input\InputInterface;
|
||||
use Symfony\Components\Console\Output\OutputInterface;
|
||||
use Symfony\Components\Console\Output\Output;
|
||||
|
||||
/*
|
||||
* This file is part of the symfony framework.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Import the initial mapping information for entities from an existing database
|
||||
* into a bundle.
|
||||
*
|
||||
* @package symfony
|
||||
* @subpackage console
|
||||
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
* @author Jonathan H. Wage <jonwage@gmail.com>
|
||||
*/
|
||||
class ImportMappingDoctrineCommand extends DoctrineCommand
|
||||
{
|
||||
/**
|
||||
* @see Command
|
||||
*/
|
||||
protected function configure()
|
||||
{
|
||||
$this
|
||||
->setName('doctrine:import-mapping')
|
||||
->setDescription('Import the initial mapping information for entities from an existing database.')
|
||||
->addOption('connection', null, InputOption::PARAMETER_REQUIRED, 'The connection import from.')
|
||||
->addOption('bundle', null, InputOption::PARAMETER_REQUIRED, 'The bundle to import the mapping information to.')
|
||||
->addOption('type', null, InputOption::PARAMETER_OPTIONAL, 'The mapping format type to generate (defaults to xml).', 'xml')
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Command
|
||||
*/
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
if (!preg_match('/Bundle$/', $bundle = $input->getOption('bundle')))
|
||||
{
|
||||
throw new \InvalidArgumentException('The bundle must end with Bundle.');
|
||||
}
|
||||
|
||||
$dirs = $this->container->getKernelService()->getBundleDirs();
|
||||
|
||||
$tmp = str_replace('\\', '/', $bundle);
|
||||
$namespace = str_replace('/', '\\', dirname($tmp));
|
||||
$bundle = basename($tmp);
|
||||
|
||||
if (!isset($dirs[$namespace]))
|
||||
{
|
||||
throw new \InvalidArgumentException(sprintf('Could not find namespace "%s" for bundle "%s".', $namespace, $bundle));
|
||||
}
|
||||
|
||||
$path = $dirs[$namespace].'/'.$bundle.'/Resources/config/doctrine/metadata';
|
||||
|
||||
if (!is_dir($path))
|
||||
{
|
||||
mkdir($path, 0777, true);
|
||||
}
|
||||
|
||||
$this->em = $this->container->getService(sprintf('doctrine.orm.%s_entity_manager', $input->getOption('connection')));
|
||||
$this->runCommand('doctrine:convert-mapping', array(
|
||||
'--from' => 'database',
|
||||
'--to' => $input->getOption('type'),
|
||||
'--dest' => $path
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user