protected function execute(InputInterface $input, OutputInterface $output) { $this->createVersionTable(); $migrations = $this->getMigrations(); if (!$migrations) { $output->writeln('No migration files found.'); return; } $currentVersion = $this->getCurrentVersion(); $output->writeln("<info>Current version is: {$currentVersion}</info>"); $specifiedVersion = $input->getArgument('version'); if ($specifiedVersion) { $output->writeln("<info>Downgrading to: {$specifiedVersion}</info>"); $downgradeVersion = $specifiedVersion; } else { $downgradeVersion = $currentVersion - 1; $output->writeln("<info>Downgrading to: previous ({$downgradeVersion})</info>"); } if ($downgradeVersion == $currentVersion) { $output->writeln("<info>Nothing to do.</info>"); } else { $pdo = $this->getConnection(); for ($c = $currentVersion; $c > $downgradeVersion; $c--) { $data = $migrations[$c]; $sql = new SqlString($data['down']); $queries = $sql->getQueries(); if ($queries) { $pdo->query("SET FOREIGN_KEY_CHECKS=0"); } else { continue; } foreach ($queries as $query) { try { $stmt = $pdo->query($query); $stmt->closeCursor(); unset($stmt); } catch (\PDOException $e) { if (!$input->getOption('continue')) { throw $e; } } } $sql = "DELETE FROM yak_version\n WHERE version='{$c}'"; $stmt = $pdo->query($sql); if ($stmt) { $stmt->closeCursor(); } $pdo->query("SET FOREIGN_KEY_CHECKS=1"); } } }
protected function execute(InputInterface $input, OutputInterface $output) { $this->createVersionTable(); $migrations = $this->getMigrations(); if (!$migrations) { $output->writeln('No migration files found.'); return; } $currentVersion = $this->getCurrentVersion(); $output->writeln("<info>Current version is: {$currentVersion}</info>"); $versionNumbers = array_keys($migrations); $specifiedVersion = $input->getArgument('version'); if ($specifiedVersion) { $output->writeln("<info>Upgrading to: {$specifiedVersion}</info>"); $upgradeVersion = $specifiedVersion; } else { $maxVersion = max($versionNumbers); $output->writeln("<info>Upgrading to: latest ({$maxVersion})</info>"); $upgradeVersion = $maxVersion; } if ($upgradeVersion == $currentVersion) { $output->writeln("<info>Nothing to do.</info>"); } else { $pdo = $this->getConnection(); for ($c = $currentVersion + 1; $c <= $upgradeVersion; $c++) { $data = $migrations[$c]; $checksum = $data['checksum']; $description = $data['description']; $output->writeln("<info>Applying {$c}: {$description}...</info>"); $sql = new SqlString($data['up']); $queries = $sql->getQueries(); foreach ($queries as $query) { try { $stmt = $pdo->query($query); $stmt->closeCursor(); unset($stmt); } catch (\PDOException $e) { if (!$input->getOption('continue')) { throw $e; } } } $date = date("YmdHis"); $sql = "INSERT INTO yak_version\n VALUES ('{$c}', '{$description}', '{$checksum}', '{$date}')"; $stmt = $pdo->query($sql); if ($stmt) { $stmt->closeCursor(); } } } }