CreateYamlForImportCommand.php 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. namespace MigrationsBundle\Command;
  3. use ClientBundle\Entity\Client;
  4. use MapBundle\Entity\Location;
  5. use MapBundle\Util\GeoDecode;
  6. use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
  7. use Symfony\Component\Console\Input\InputArgument;
  8. use Symfony\Component\Console\Input\InputOption;
  9. use Symfony\Component\Console\Input\InputInterface;
  10. use Symfony\Component\Console\Output\OutputInterface;
  11. class CreateYamlForImportCommand extends ContainerAwareCommand
  12. {
  13. protected function configure()
  14. {
  15. $this
  16. ->setName('migrate:create:import')
  17. ->setAliases(array("ik:mg:import"))
  18. ->setDescription('Create yaml for import.')
  19. ->setHelp('Create yaml from table.')
  20. ->addArgument('table', InputArgument::REQUIRED, "Table name to export data.")
  21. ->addArgument('file-name', InputArgument::REQUIRED, "Name of the file.")
  22. ->addOption("where", null, InputOption::VALUE_OPTIONAL, "Where for sql sentece.", "")
  23. ->addOption("action", null, InputOption::VALUE_OPTIONAL, "Action for sql sentencies. Options: INSERT, UPDATE, DELETE, REPLACE, INSERTORUPDATE, INSERTIGNORE", "INSERTORUPDATE");
  24. }
  25. protected function execute(InputInterface $input, OutputInterface $output)
  26. {
  27. $em = $this->getContainer()->get('doctrine')->getManager();
  28. $table = $input->getArgument('table');
  29. $fileName = $input->getArgument('file-name');
  30. $stmt = $em->getConnection()->executeQuery("select * from " . $table .
  31. (trim($input->getOption("where")) == '' ? '' : ' where ' . $input->getOption("where")));
  32. if ($stmt->rowCount() > 0) {
  33. $result = $stmt->fetchAll();
  34. $str = $input->getOption("action") . ":\n";
  35. $str .= " $table:\n";
  36. foreach ($result as $row) {
  37. $first = true;
  38. foreach ($row as $key => $value) {
  39. $value = str_replace("\\", '\\\\', $value);
  40. $value = str_replace('"', '\"', $value);
  41. $value = str_replace(array("\n", "\r"), array("\\n", "\\r"), $value);
  42. if (trim($value) == "") {
  43. // al estar vacio el string, tengo que verificar si el valor es null
  44. if (isset($row['id'])) {
  45. // existe la columna id para utilizar en el where
  46. $stmtNull = $em->getConnection()->executeQuery("select if(isnull(" . $key . "), 1, 0) as valor from " . $table . " where id = " . $row['id']);
  47. if ($stmtNull->rowCount() > 0) {
  48. $resultNull = $stmtNull->fetchAll();
  49. $value = $resultNull[0]['valor'] == 1 ? "NULL" : "";
  50. }
  51. }
  52. }
  53. if ($first) {
  54. $str .= " - $key: \"" . $value . "\"\n";
  55. $first = false;
  56. } else {
  57. $str .= " $key: \"" . $value . "\"\n";
  58. }
  59. }
  60. }
  61. file_put_contents($fileName, $str);
  62. } else {
  63. echo "No results";
  64. }
  65. }
  66. }