Symfony2 Doctrine实体:如何在控制器中创建表?

时间:2014-04-02 17:04:42

标签: php symfony doctrine-orm entity create-table

我需要DB中的动态创建表的一些功能。 算法是: 1)注册新用户 - >在DB中记录(这很简单) 2)注册后创建像user_data_abcdef123456...这样的表,其中abcdef123456 - 是随机预生成的哈希。此表必须从(例如)现有默认实体(user_data_)创建 实体:

Path\To\Entity\UserData:
    type: entity
    table: user_data_
....
Controller中的

是这样的:

$doctrine = $this->getDoctrine();

/** @var AbstractSchemaManager $manager */
$manager = $doctrine->getConnection()->getSchemaManager();
/** @var ClassMetadata $metadata */
$metadata = $doctrine->getManager()->getClassMetadata($class);
$metadata->setPrimaryTable(array('name' => $metadata->getTableName() . $project));

$table = new Table($metadata->getTableName());
$manager->createTable($table);

我需要设置所有列,所有索引等等。

有没有正确的解决方案?

2 个答案:

答案 0 :(得分:3)

万岁!我找到了解决方案感谢您trevorengstrom回答Doctrine automatically create all the database tables。 解决方案是:

    $doctrine = $this->getDoctrine();

    /** @var ObjectManager|EntityManagerInterface $manager */
    $manager = $doctrine->getManager();

    /** @var ClassMetadata $metadata */
    $metadata = $manager->getClassMetadata($class);
    $metadata->setPrimaryTable(array('name' => $metadata->getTableName() . $project));

    $schemaTool = new SchemaTool($manager);
    $schemaTool->createSchema(array($metadata));  

其中$class = 'DemoBundle:UserData'$project = 'abcdef123456...';

答案 1 :(得分:0)

如果你正在使用Repository(你应该使用它们)干净的创建表的方法:

MyClass::MyClass()
{
    test = "asdf";
}