20
votes

I have migrated an existing Laravel 5 application and database. Only no migrations table was there yet, so I created this with the following command:

php artisan migrate:install

Inside the database migration folders three files exist (2015_12_08_134409_create_tables_script.php, 2015_12_08_134410_create_foreign.php, 2015_12_08_134411_create_index.php)

When using 'php artisan migrate' the scripts inside the migrations folder are executed again. This is what I want to avoid. Is it possible to insert records in Laravel's migrations table, so these scripts will be skipped and new scripts will be picked up once 'php artisan migrate' is executed again?

2

2 Answers

27
votes

Once you have the migration table created, insert these records:

insert into migrations(migration, batch) values('2015_12_08_134409_create_tables_script',1);
insert into migrations(migration, batch) values('2015_12_08_134410_create_foreign',1);
insert into migrations(migration, batch) values('2015_12_08_134411_create_index',1);

So artisan will understand those migrations as 'executed'

13
votes

Another way is just create a folder under database/migrations to put you want skip migrations, this method works for both files that have been migrated or not yet migrated.

# Execute commands in laravel project root folder
mkdir database/migrations/ignored
mv database/migrations/2018_08_14_000000_should_ignore_migration.php \
   database/migrations/ignored/

# Check migration has been skipped
php artisan migrate:status

2018-09-25 update:

This Artisan CLI extension command is support single command to migrate specific files on Laravel 5.4 or later:

# Install extension
composer require caloskao/migrate-specific

# Migrate
php artisan migrate:specific /path/to/migration_file.php