适用于 PHP 的框架无关数据库迁移。
Framework agnostic database migrations for PHP.
-vvv), providing transparency and aiding in troubleshooting.This library requires PHP 7.4 or later. It works also on PHP 8.0+. The fastest and recommended way to install Phoenix is to add it to your project using Composer (https://getcomposer.org/).
composer require lulco/phoenixCreate file phoenix.php in the root directory of your project. For example:
…Read more about configuration here.
REMEMBER: migrations do some structure changes to the database, therefore the database user used for these migrations has to be able to do these changes.
To run commands, use command runner vendor/bin/phoenix or vendor/lulco/phoenix/bin/phoenix.
init - initialize phoenixcreate - create migrationmigrate - run migrationsrollback - rollback migrationsdump - create migration from existing databasediff - create migration as diff of two existing database structuresstatus - list of migrations already executed and list of migrations to executetest - test next migration by executing migrate, rollback, migrate for itcleanup - rollback all migrations and delete log tableYou can run each command with --help option to get more information about it or read more here
Command php vendor/bin/phoenix init initializes phoenix and creates database table where executed migrations will be stored in. This command is executed automatically with first run of other commands, so you don't have to run it manually.
Create command php vendor/bin/phoenix create []
php vendor/bin/phoenix create "FirstDir\MyFirstMigration" secondThis will create PHP class FirstDir\MyFirstMigration in file named {timestamp}_my_first_migration.php where {timestamp} represents actual timestamp in format YmdHis e.g. 20160919082117. This file will be created in migration directory second which is configured as __DIR__ . '/../second_dir' (see configuration example above).
create command creates a skeleton of migration file, which looks like this:
table('first_table')
->addColumn('title', 'string')
->addColumn('url', 'string')
->addColumn('sorting', 'integer')
->addColumn('created_at', 'datetime')
->addIndex('url', Index::TYPE_UNIQUE)
->create();
}
}Or you can use raw sql:
execute('CREATE TABLE `first_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`url` varchar(255) NOT NULL,
`sorting` int(11) NOT NULL,
`created_at` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_first_table_url` (`url`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;'
);
}
}Implementation of correspondent down() method which drops table first_table looks like below:
protected function down(): void
{
$this->table('first_table')
->drop();
}Now you can run migrate command to execute your first migration.
Migrate command php vendor/bin/phoenix migrate executes all available migrations. In this case you will see output like this:
php vendor/bin/phoenix migrate
Migration FirstDir\MyFirstMigration executing
Migration FirstDir\MyFirstMigration executed. Took 0.0308s
All done. Took 0.0786sIf you run this command again, there will be no migrations to execute, so the output looks like this:
php vendor/bin/phoenix migrate
Nothing to migrate
All done. Took 0.0451sIf you want to rollback changes (e.g. you found out that you forgot add some column or index), you can run rollback command, update migration and then run migrate command again. Keep in mind that the best practice is to run rollback command before updating migration code.
Rollback command php vendor/bin/phoenix rollback rollbacks last executed migration. In this case you will see output like this:
php vendor/bin/phoenix rollback
Rollback for migration FirstDir\MyFirstMigration executing
Rollback for migration FirstDir\MyFirstMigration executed. Took 0.0108s
All done. Took 0.0594sIf you run this command again, there will be no migrations to rollback, so the output looks like this:
php vendor/bin/phoenix rollback
Nothing to rollback
All done. Took 0.0401sThe php vendor/bin/phoenix dump command generates a migration file from your current database structure, making it easy to start using Phoenix with existing tables. It’s particularly useful for transitioning between MySQL and PostgreSQL.
Key benefits:
For detailed usage, see the Dump Command documentation and our guide on switching databases.
The php vendor/bin/phoenix diff command generates a migration by comparing two existing database structures. This is ideal for system upgrades where you have both the old and new version schemas.
For detailed usage, see the Diff Command documentation.
Run php vendor/bin/phoenix status and show list of migrations already executed and list of migrations to execute. Output is like this:
…Cleanup command php vendor/bin/phoenix cleanup rollbacks all executed migrations and delete log table. After executing this command, the application is in state as before executing init command.
php bin/phoenix cleanup
Rollback for migration FirstDir\MyFirstMigration executed
Phoenix cleanedTest command php vendor/bin/phoenix test executes first next migration, then run rollback and migrate first migration again. This command is shortcut for executing commands:
php bin/phoenix migrate --first
php bin/phoenix rollback
php bin/phoenix migrate --firstOutput looks like this:
php bin/phoenix test
Test started...
Migration FirstDir\MyFirstMigration executing...
Migration FirstDir\MyFirstMigration executed. Took 0.0456s
Rollback for migration FirstDir\MyFirstMigration executing...
Rollback for migration FirstDir\MyFirstMigration executed. Took 0.0105s
Migration FirstDir\MyFirstMigration executing...
Migration FirstDir\MyFirstMigration executed. Took 0.0378s
Test finished successfully
All done. Took 0.2840sRead more about commands here
暂无开放 Issues,或尚未同步最近议题。