在Controller Symfony2上选择数据库并创建架构



我正在尝试创建一个新的数据库并从Controller加载架构。

我在运行中创建了数据库,但不知道如何选择新数据库来加载模式。

这是我的代码:

参数.yml

parameters:
# Admin database
database_driver: pdo_mysql
database_host: localhost
database_port: '3306'
database_name: app_db
database_user: root
database_password: XXX
# A Center database
database_driver2: pdo_mysql
database_host2: localhost
database_port2: '3306'
database_name2: center_1
database_user2: root
database_password2: XXX

config.yml

# Doctrine Configuration
doctrine:
dbal:
default_connection:   default
connections:
default:
driver:   %database_driver%
host:     %database_host%
port:     %database_port%
dbname:   %database_name%
user:     %database_user%
password: %database_password%
charset:  UTF8
center:
driver:   %database_driver2%
host:     %database_host2%
port:     %database_port2%
dbname:   %database_name2%
user:     %database_user2%
password: %database_password2%
charset:  UTF8
orm:
auto_generate_proxy_classes: %kernel.debug%
#auto_mapping: true
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
BackendBundle: ~
CenterBundle: ~
center:
connection: center
mappings:
UsuarioBundle: ~

在控制器中,当我添加一个新的中心时,我会动态创建数据库,center_1,center_2…

###################
# CREATE DATABASE #
###################
$connectionFactory = $this->container->get('doctrine.dbal.connection_factory');
$connection = $connectionFactory->createConnection(array(
'driver' => 'pdo_mysql',
'user' => 'root',
'password' => XXX,
'host' => 'localhost',
'dbname' => 'center_'.$center->getId(),
));
$params = $connection->getParams();
$name = isset($params['path']) ? $params['path'] : $params['dbname'];
unset($params['dbname']);
$tmpConnection = DriverManager::getConnection($params);
// Only quote if we don't have a path
if (!isset($params['path'])) {
$name = $tmpConnection->getDatabasePlatform()->quoteSingleIdentifier($name);
}
$error = false;
try {
$tmpConnection->getSchemaManager()->createDatabase($name);
echo sprintf('<info>Created database for connection named <comment>%s</comment></info>', $name);
} catch (Exception $e) {
echo sprintf('<error>Could not create database for connection named <comment>%s</comment></error>', $name);
echo sprintf('<error>%s</error>', $e->getMessage());
$error = true;
}
$tmpConnection->close();

我的问题是,如何选择那个数据库并加载模式。

可以随时更改Center数据库的参数.yml,然后执行命令:

app/console doctrine:schema:create --em=center

如果不可能,另一个想法​​怎么做?

************2013年1月14日版

我加了一个我喜欢的例子,也许我没有解释好。

当我添加一个新中心时,上面的代码会创建一个新的中心,并为该中心创建一个数据库,例如数据库调用"center_13">

现在,如果我喜欢创建数据库模式,我需要转到parameters.yml并为这个数据库创建一个新的参数

参数.yml

parameters:
....
# A Center database
database_name_13: center_13

我还需要在config.yml 中创建一个新的连接

config.yml

# Doctrine Configuration
doctrine:
dbal:
default_connection:   default
connections:
default:
...
center_13:
driver:   %database_driver%
host:     %database_host%
port:     %database_port%
dbname:   %database_name_13%
user:     %database_user%
password: %database_password%
charset:  UTF8
orm:
auto_generate_proxy_classes: %kernel.debug%
#auto_mapping: true
default_entity_manager: default
entity_managers:
default:
...
center_13:
connection: center_13
mappings:
UsuarioBundle: ~

现在,如果我运行命令

app/console doctrine:schema:create --em=center_13

它使用UsuarioBundle实体配置数据库"center_13"。

我想知道如何在我的控制器的去创建中心操作中完成这个过程

命令

应用程序/控制台原则:模式:创建

应用程序/控制台原则:模式:更新

将按照模型配置中的定义配置数据库,但不是从控制器配置。

您可以创建一个自定义的symfony命令,并将其与createDatabaseController相关联,但我会首先确保这是值得的。

相关内容

  • 没有找到相关文章

最新更新