2012-05-20 10 views

Respuesta

18

Usando SchemaTool y EntityManager puede hacer esto:

$schemaTool = new \Doctrine\ORM\Tools\SchemaTool($entityManager); 
$classes = $entityManager->getMetadataFactory()->getAllMetadata(); 
$schemaTool->createSchema($classes); 
+0

¿cómo puedo determinar que el esquema se crea antes o no? –

+0

No creo que haya una forma de ver si el esquema ha sido creado. En mi experiencia, simplemente he usado '$ schemaTool-> dropSChema ($ classes)' antes de crearlo. – trevorengstrom

+1

@Sina Miandashti también puedes hacer un try-catch. 'try {// aquí crea el código de tabla} catch (\ Doctrine \ ORM \ Tools \ ToolsException $ exc) {// Table exists}' – Hokusai

4

No estoy seguro de lo que quiere hacer, pero si quieres hacerlo desde el código php, se puede comprobar cómo funciona el comando de doctrina y copia el código. Puede encontrarlo aquí:

vendor/symfony/src/Symfony/Bundle/DoctrineBundle/Command/CreateDatabaseDoctrineCommand.php 

Si comprueba el método de ejecución, verá cómo se hace. Aparentemente, debe obtener una conexión a través de DBAL DriverManager, que le da acceso a un objeto de esquema, que a su vez tiene un método createDatabase. No lo he intentado yo mismo.

Cuestiones relacionadas