CreateYamlForImportCommand.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. }
  23. protected function execute(InputInterface $input, OutputInterface $output)
  24. {
  25. $em = $this->getContainer()->get('doctrine')->getManager();
  26. $table = $input->getArgument('table');
  27. $fileName = $input->getArgument('file-name');
  28. $stmt = $em->getConnection()->executeQuery("select * from " . $table);
  29. if ($stmt->rowCount() > 0) {
  30. $result = $stmt->fetchAll();
  31. $str = "insertorupdate:\n";
  32. $str .= " $table:\n";
  33. foreach ($result as $row) {
  34. $first = true;
  35. foreach ($row as $key => $value) {
  36. $value = str_replace("\\", '\\\\', $value);
  37. $value = str_replace('"', '\"', $value);
  38. $value = str_replace(array("\n", "\r"), array("\\n", "\\r"), $value);
  39. if (trim($value) == "") {
  40. // al estar vacio el string, tengo que verificar si el valor es null
  41. if (isset($row['id'])) {
  42. // existe la columna id para utilizar en el where
  43. $stmtNull = $em->getConnection()->executeQuery("select if(isnull(" . $key . "), 1, 0) as valor from " . $table . " where id = " . $row['id']);
  44. if ($stmtNull->rowCount() > 0) {
  45. $resultNull = $stmtNull->fetchAll();
  46. $value = $resultNull[0]['valor'] == 1 ? "NULL" : "";
  47. }
  48. }
  49. }
  50. if ($first) {
  51. $str .= " - $key: \"" . $value . "\"\n";
  52. $first = false;
  53. } else {
  54. $str .= " $key: \"" . $value . "\"\n";
  55. }
  56. }
  57. }
  58. file_put_contents($fileName, $str);
  59. } else {
  60. echo "No results";
  61. }
  62. }
  63. }