Safely remove migration In Laravel
Asked Answered
L

9

267

In Laravel, there appears to be a command for creating a migration, but not removing.

Create migration command:

php artisan migrate:make create_users_table

If I want to delete the migration, can I just safely delete the corresponding migrations file within the database/migrations folder?

Migrations file:

2013_05_31_220658_create_users_table
Laurenalaurence answered 1/6, 2013 at 9:53 Comment(0)
M
484

I accidentally created a migration with a bad name (command: php artisan migrate:make). I did not run (php artisan migrate) the migration, so I decided to remove it. My steps:

  1. Manually delete the migration file under app/database/migrations/my_migration_file_name.php
  2. Reset the composer autoload files: composer dump-autoload
  3. Relax

If you did run the migration (php artisan migrate), you may do this:

a) Run migrate:rollback - it is the right way to undo the last migration (Thnx @Jakobud)

b) If migrate:rollback does not work, do it manually (I remember bugs with migrate:rollback in previous versions):

  1. Manually delete the migration file under app/database/migrations/my_migration_file_name.php
  2. Reset the composer autoload files: composer dump-autoload
  3. Modify your database: Remove the last entry from the migrations table
Mamba answered 24/7, 2013 at 9:36 Comment(7)
Thanks. The gottcha for me after deleting a migration was forgetting to run composer dump-autoloadQuincyquindecagon
If you have run the migration, the "proper" way is to run migrate:rollback to rollback the migration, then delete the migration file and dump autoload. No need to hack the db or the migrations table.Vicechancellor
4. Delete the actual table from the DBCurio
I am wondering how to rollback the changes made a few migration steps ago. Maybe use migrate:reset?Epicurus
Great answer! I know that your answer is for an older version but I believe that running composer dump-autoload is no longer needed from Laravel 6.x. Might be worth noting for future reference?Kimberlite
is migrate:rollback safe in production? will other data in other tables keep intact except the table that just migrated?Prosecute
@Prosecute it usually depends. It will be safe as it would only rollback the latest migration operation. You may want to add the step parameter. See: laravel.com/docs/9.x/migrations#rolling-back-migrationsMamba
C
69

If the migration has been run (read: migrated) then you should roll back your migration to clear the history from your database table. Once you're rolled back you should be able to safely delete your migration file and then proceed with migrating again.

Carrell answered 1/6, 2013 at 10:19 Comment(2)
He hasn't run the migration, though. You can't roll back what you didn't actually do, can you?Orel
No you can't, but if that's the case then there should be no history stored in the migrations database which means you can safely delete the file.Carrell
F
34

DO NOT run php artisan migrate:fresh that's gonna drop all the tables

Froh answered 3/8, 2020 at 15:53 Comment(1)
I love how this is not an answer to the question, but yet useful and save lives.Preface
O
14

You likely need to delete the entry from the migrations table too.

Orel answered 1/6, 2013 at 10:1 Comment(1)
Delete migration and the row in the migrations table. This looks like the most straightforward solution to me.Galegalea
R
12

DON'T run this on production but this should do the job, if you are in development and the desired outcome is to start all over:

# php artisan migrate:fresh

In production, that maybe not the desired thing, so you should be adverted. (The migrate:fresh command will drop all tables from the database and then execute the migrate command).

Redeeming answered 2/9, 2018 at 16:39 Comment(5)
3 upvotes? the OP asked for a way to delete a migration, not destroy and refresh the entire database. This is awful advice, don't do this unless you know what you're doing.Antagonism
kindly read about the difference between migrate:refresh and migrate:fresh you seen to be describing the first, the later in way does partial reset avoiding the manual work!Redeeming
migrate:fresh immediately drops ALL tables and re-runs migrations as if running for the first time. There is nothing partial about it.. any data will be gone. It will fix the problem but it's not a valid answer to the question.Antagonism
This command delete All tables and re-runs migrations rather than remove migration file :|Withindoors
please read before you run this commandRedeeming
C
9

I accidentally created two times create_users_table. It overrided some classes and turned rollback into ErrorException.

What you need to do is find autoload_classmap.php in vendor/composer folder and look for the specific line of code such as

'CreateUsersTable' => $baseDir . '/app/database/migrations/2013_07_04_014051_create_users_table.php',

and edit path. Then your rollback should be fine.

Campanulaceous answered 4/7, 2013 at 2:42 Comment(2)
If you - like I did - just went along and renamed a migration file this is the answer you are looking for! Thanks.Accumulation
You could also just simply do "composer dumpautoload"Bewilderment
L
6

A new feature has been added to Laravel 5.3 and above version that will allow you to back out a single migration:

php artisan migrate:rollback --step=1

after, Manually delete the migration file under database/migrations/my_migration_file_name.php

This is a great feature for when you run a migration

In this way, you can safely remove the migration in laravel only in 2 step

Letty answered 2/5, 2018 at 6:22 Comment(0)
C
6

I will rather do it manually

  1. Delete the model first (if you don't) need the model any longer
  2. Delete the migration from ...database/migrations folder
  3. If you have already migrated i.e if you have already run php artisan migrate, log into your phpmyadmin or SQL(whichever the case is) and in your database, delete the table created by the migration
  4. Still within your database, in the migrations folder, locate the row with that migration file name and delete the row.

Works for me, hope it helps!

Circumflex answered 23/3, 2020 at 9:50 Comment(0)
G
0

After deleting the file, run composer dumpautoload.

Without this, you might be getting errors like:

[ErrorException]
  include(/var/www/vendor/composer/../../database/migrations/2023_11_10_131103_generate_unique_ids.php): failed to open stream: No such file or directory
Gemini answered 10/11, 2023 at 11:18 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.