Laravel Migrations that cause error don't rollback

One solution is to execute your migrations from within a transaction, so that if an error occurs mid-migration, nothing gets committed and the whole transaction gets rolled back. Antonio Carlos Ribeiro has written a great class that handles this process neatly; see his description of the process here as well as the finished migration class on GitHub.

Once you've installed his class, create your migrations so that they extend the new Migration class, and call migrateUp() and migrateDown() in place of up() and down():

class CreateAccountsTable extends PragmaRX\Support\Migration {

    protected function migrateUp()
    ...

...and enjoy not having to manually fix a botched migration again!