LazyRecord\Migration\MigrationRunner::loadMigrationScripts PHP Method

loadMigrationScripts() public method

    public function loadMigrationScripts()
    {
        $classes = get_declared_classes();
        $classes = array_filter($classes, function ($class) {
            return is_a($class, 'LazyRecord\\Migration\\Migration', true) && $class != 'LazyRecord\\Migration\\Migration';
        });
        // sort class with timestamp suffix
        usort($classes, function ($a, $b) {
            if (preg_match('#_(\\d+)$#', $a, $regsA) && preg_match('#_(\\d+)$#', $b, $regsB)) {
                list($aId, $bId) = array($regsA[1], $regsB[1]);
                if ($aId == $bId) {
                    return 0;
                }
                return $aId < $bId ? -1 : 1;
            }
            return 0;
        });
        return $classes;
    }

Usage Example

 public function testMigrationByDiff()
 {
     $this->conn->query('DROP TABLE IF EXISTS users');
     $this->conn->query('DROP TABLE IF EXISTS test');
     $this->conn->query('CREATE TABLE users (account VARCHAR(128) UNIQUE)');
     if (!file_exists('tests/migrations_testing')) {
         mkdir('tests/migrations_testing');
     }
     $generator = new MigrationGenerator(Console::getInstance()->getLogger(), 'tests/migrations_testing');
     ok(class_exists('TestApp\\Model\\UserSchema', true));
     $finder = new SchemaFinder();
     $finder->find();
     list($class, $path) = $generator->generateWithDiff('DiffMigration', $this->getDriverType(), ["users" => new TestApp\Model\UserSchema()], '20120101');
     require_once $path;
     ok($class::getId());
     /*
     $userSchema = new TestApp\Model\UserSchema;
     $column = $userSchema->getColumn('account');
     */
     // run migration
     $runner = new MigrationRunner($this->logger, $this->getDriverType());
     $runner->resetMigrationId($this->conn, $this->queryDriver);
     $runner->load('tests/migrations_testing');
     // XXX: PHPUnit can't run this test in separated unit test since
     // there is a bug of serializing the global array, this assertion will get 5 instead of the expected 1.
     $scripts = $runner->loadMigrationScripts();
     $this->assertNotEmpty($scripts);
     // $this->assertCount(1, $scripts);
     // $this->expectOutputRegex('#DiffMigration_1325347200#');
     $runner->runUpgrade($this->conn, $this->queryDriver, [$class]);
     # echo file_get_contents($path);
     unlink($path);
     $this->conn->query('DROP TABLE IF EXISTS users');
 }