1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- <?php
- namespace MigrationsBundle\Command;
- use ClientBundle\Entity\Client;
- use MapBundle\Entity\Location;
- use MapBundle\Util\GeoDecode;
- use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
- use Symfony\Component\Console\Input\InputArgument;
- use Symfony\Component\Console\Input\InputOption;
- use Symfony\Component\Console\Input\InputInterface;
- use Symfony\Component\Console\Output\OutputInterface;
- class CreateYamlForImportCommand extends ContainerAwareCommand
- {
- protected function configure()
- {
- $this
- ->setName('migrate:create:import')
- ->setAliases(array("ik:mg:import"))
- ->setDescription('Create yaml for import.')
- ->setHelp('Create yaml from table.')
- ->addArgument('table', InputArgument::REQUIRED, "Table name to export data.")
- ->addArgument('file-name', InputArgument::REQUIRED, "Name of the file.")
- ->addOption("where", null, InputOption::VALUE_OPTIONAL, "Where for sql sentece.", "")
- ->addOption("action", null, InputOption::VALUE_OPTIONAL, "Action for sql sentencies. Options: INSERT, UPDATE, DELETE, REPLACE, INSERTORUPDATE, INSERTIGNORE", "INSERTORUPDATE");
- }
- protected function execute(InputInterface $input, OutputInterface $output)
- {
- $em = $this->getContainer()->get('doctrine')->getManager();
- $table = $input->getArgument('table');
- $fileName = $input->getArgument('file-name');
- $stmt = $em->getConnection()->executeQuery("select * from " . $table .
- (trim($input->getOption("where")) == '' ? '' : ' where ' . $input->getOption("where")));
- if ($stmt->rowCount() > 0) {
- $result = $stmt->fetchAll();
- $str = $input->getOption("action") . ":\n";
- $str .= " $table:\n";
- foreach ($result as $row) {
- $first = true;
- foreach ($row as $key => $value) {
- $value = str_replace("\\", '\\\\', $value);
- $value = str_replace('"', '\"', $value);
- $value = str_replace(array("\n", "\r"), array("\\n", "\\r"), $value);
- if (trim($value) == "") {
- // al estar vacio el string, tengo que verificar si el valor es null
- if (isset($row['id'])) {
- // existe la columna id para utilizar en el where
- $stmtNull = $em->getConnection()->executeQuery("select if(isnull(" . $key . "), 1, 0) as valor from " . $table . " where id = " . $row['id']);
- if ($stmtNull->rowCount() > 0) {
- $resultNull = $stmtNull->fetchAll();
- $value = $resultNull[0]['valor'] == 1 ? "NULL" : "";
- }
- }
- }
- if ($first) {
- $str .= " - $key: \"" . $value . "\"\n";
- $first = false;
- } else {
- $str .= " $key: \"" . $value . "\"\n";
- }
- }
- }
- file_put_contents($fileName, $str);
- } else {
- echo "No results";
- }
- }
- }
|