I've researched this topic for a while, and many people said that just use the --seed option instead.
The --seed solution has its good points for the development environment, but how about the production environment? If you are not planning to modify the database structure manually, then you have to write a new migration for the modification right?
I'm very sure that our database structure will be modified again and again in the future as long as we keep improving the product.
What's going to happen then? Your migration files keep increasing gradually, 10,20,30.... I don't have the confidence to handle such a mess... Actually, even it's way more intuitive to create and modify the table manually... Once you've released your product you have to keep writing new migration files, and I believe that's the beginning of the nightmare.
So what's the best practice?!
(I just can't understand why it's a good idea to delete the data when refreshing the database... I thought it's nothing but chaos)
By the way, this is what I thought the relatively better and extremely ugly solution...
You write a new migration file, you then migrate it, and delete the new migration file, lastly, modify the original migration file to match the latest database structure.