Angel's ORM ships with support for running database migrations, using a system modeled over that of Laravel.
An example is shown below:
class UserMigration implements Migration {void up(Schema schema) {schema.create('users', (table) {table..serial('id').primaryKey()..varChar('username', length: 32).unique()..varChar('password')..boolean('account_confirmed').defaultsTo(false);});}​void down(Schema schema) {schema.drop('users');}}
Migrations can be used to either create, alter, or drop database tables.
For more in-depth documentation, consult the angel_migration
documentation:
​https://github.com/angel-dart/migration​
If you use angel_orm_generator
, then a migration will be generated by default for each class annotated with @orm
.
To disable this:
(generateMigrations: false)abstract class _MyModel extends Model {}
Using package:angel_migration_runner
, we can create executables that run our database migrations:
import 'package:angel_migration_runner/angel_migration_runner.dart';import 'package:angel_migration_runner/postgres.dart';import 'package:postgres/postgres.dart';import '../../angel_migration/example/todo.dart';​var migrationRunner = PostgresMigrationRunner(PostgreSQLConnection('127.0.0.1', 5432, 'test'),migrations: [UserMigration(),TodoMigration(),],);
Running this file will produce output like the following:
Executes Angel migrations.​Usage: migration_runner <command> [arguments]​Global options:-h, --help Print this usage information.​Available commands:help Display help information for migration_runner.refresh Resets the database, and then re-runs all migrations.reset Resets the database.rollback Undoes the last batch of migrations.up Runs outstanding migrations.​Run "migration_runner help <command>" for more information about a command.
The migration runner keeps track of a migrations
table, in order to be able to keep track of which migrations it has run.