我需要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);
我需要设置所有列,所有索引等等。
有没有正确的解决方案?
答案 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";
}