CreateCommand.php 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. /*
  3. * $Id$
  4. *
  5. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  6. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  7. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  8. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  9. * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  10. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  11. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  12. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  13. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  14. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  15. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  16. *
  17. * This software consists of voluntary contributions made by many individuals
  18. * and is licensed under the LGPL. For more information, see
  19. * <http://www.doctrine-project.org>.
  20. */
  21. namespace Doctrine\ORM\Tools\Console\Command\SchemaTool;
  22. use Symfony\Component\Console\Input\InputArgument,
  23. Symfony\Component\Console\Input\InputOption,
  24. Symfony\Component\Console\Input\InputInterface,
  25. Symfony\Component\Console\Output\OutputInterface,
  26. Doctrine\ORM\Tools\SchemaTool;
  27. /**
  28. * Command to create the database schema for a set of classes based on their mappings.
  29. *
  30. * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
  31. * @link www.doctrine-project.org
  32. * @since 2.0
  33. * @version $Revision$
  34. * @author Benjamin Eberlei <kontakt@beberlei.de>
  35. * @author Guilherme Blanco <guilhermeblanco@hotmail.com>
  36. * @author Jonathan Wage <jonwage@gmail.com>
  37. * @author Roman Borschel <roman@code-factory.org>
  38. */
  39. class CreateCommand extends AbstractCommand
  40. {
  41. /**
  42. * @see Console\Command\Command
  43. */
  44. protected function configure()
  45. {
  46. $this
  47. ->setName('orm:schema-tool:create')
  48. ->setDescription(
  49. 'Processes the schema and either create it directly on EntityManager Storage Connection or generate the SQL output.'
  50. )
  51. ->setDefinition(array(
  52. new InputOption(
  53. 'dump-sql', null, InputOption::VALUE_NONE,
  54. 'Instead of try to apply generated SQLs into EntityManager Storage Connection, output them.'
  55. )
  56. ))
  57. ->setHelp(<<<EOT
  58. Processes the schema and either create it directly on EntityManager Storage Connection or generate the SQL output.
  59. EOT
  60. );
  61. }
  62. protected function executeSchemaCommand(InputInterface $input, OutputInterface $output, SchemaTool $schemaTool, array $metadatas)
  63. {
  64. $output->write('ATTENTION: This operation should not be executed in a production environment.' . PHP_EOL . PHP_EOL);
  65. if ($input->getOption('dump-sql') === true) {
  66. $sqls = $schemaTool->getCreateSchemaSql($metadatas);
  67. $output->write(implode(';' . PHP_EOL, $sqls) . PHP_EOL);
  68. } else {
  69. $output->write('Creating database schema...' . PHP_EOL);
  70. $schemaTool->createSchema($metadatas);
  71. $output->write('Database schema created successfully!' . PHP_EOL);
  72. }
  73. }
  74. }