I have follow the laravel migration steps and its good. My problem is about on modifying the column. I already installed the doctrine\dbal in composer. But when i change the column $table->string('name')->nullable()->change() with change method, then run php artisan migrate. Is says nothing to migrate. Why? Do i need to use the doctrin\dbal like this use Doctine\dbal in the migration table class? Or what is the better way to implement for modifying the table column in migration and what artisan should i run? Any help please!
Tenancy migrations will only run once, meaning once it has been run, it will not run again once the php artisan migrate has been run. You can see all migrations which have been run in your application by viewing the migrations table in your database.
If you edit a migration file and need to re-run all your migrations you can use the following command php artisan migrate:refresh. This will rollback all your migrations and re-run them and also increment the batch number on the migrations table.
If you need to edit one of your tables but don't need to re-run all your migrations, you should create a new migration and edit the table in question in that particular migration. Once the migrate command has been run again, only your new migration will be executed.
You can find more information on all of this in the following link: https://laravel.com/docs/5.4/migrations
Related
I have a site in development so database structure is still in flux. If I run migrate:reset, this rollbacks all migrations. Am I, therefore, okay to amend the migrations - i.e. amend Schema closures and remove migration files etc - as opposed to adding more migrations to amend the DB structure? For example, client asked for certain functionality requiring a table, decides later he doesn't want it so I have a table in my migrations I will never use. Ideally I don't want this to appear in my migrations.
If you don't need a table anymore in your project of course you can delete it's migration file.
When you run php artisan migrate:reset Laravel rolls back all migrations. But if you delete your migration file without rolling it back, Laravel will try to find that migration file to roll it back and when it can't find that file; it will throw an exception.
In such cases you can use php artisan migrate:fresh
With migrate:fresh Laravel doesn't try to find and roll back migrations, it just drops all tables and starts a fresh migrations table and migrates every file from start.
So; if you have changes on your migration files, anything, and if you are on development enviroment and nothing will affected: you can do whatever you want with your migration files and run php artisan migrate:fresh to drop every table and migrate them again.
Please check here: https://laravel.com/docs/8.x/migrations#rolling-back-migrations
Have been using Laravel for over a year now. My migrations folder has 39 files at the moment and i work (construct/destroy) with my database occasionally.
What happens is since ive created a "create_payments_table" migration, every migrate command that i execute builds all my tables normally but when login the migration history to my migrations table it stops at the 'create_payments_table' migration. So now when i create new migrations and run migrate again it tries to restart from my payments table which already exists giving me an error. Comparing my "create_payments_table" migration with the last logged migration file "create_pictures_table" it seems that everything is in order. Would like to know why my migrations create the tables but not all of them are been logged in migrations table?
My migrations table:
My migrations folder:
As u can see i added two new migrations and would like to run them without having to rollback my migrations table. But when doing so:
I get this error as artisan tryies to run de pauments migration again
You can migrate only a specific migration file :
php artisan migrate --path=/database/migrations/my_migration.php
Where my_migration will be your new migration file name like 2020_06_20_221554_create_additional_users_table
I created a MYSQL database using migrations, I added some data into it, but after that I recognized that I need to add a new column into my table.
I ran the command: 'php artisan migrate', but as it didn't work to synchronize
columns, it returns there is nothing to migrate.
So I ran the command 'php artisan migrate:reset', and then ran the command
'php artisan migrate' again, database schema updated correctly but for sure I
lost all my inserted data.
Now I'm just testing the application, but it would be very harmful if I found out that I should modify my database while it is runing with real data!!! What should I do in this case?
should I skip using migrations and create the Mysql database directly with
wamp? or use migration, but perform any later updates directly on database without updating the migration files? or there is another solution?
Answer
If you have already created a database table and realise you need to add more into it you can simply run: php artisan make:migration add_field_to_table_name --table=tableName
You then go into that file and create the new field. Once done simply run php artisan migrate and it'll add the new field into the desired table without causing any data loss.
Seeders
On another note, I would strongly suggest looking into seeders. This way when you're creating a project you can always refresh your migrations (wipe your database and re-migrate your tables) and then re-input the data using seeders.
you can create a migration to alter your tables. add new columns and more.
As per laravel doc, To rollback the latest migration operation, you may use the rollback command. This command rolls back the last "batch" of migrations, which may include multiple migration files:
php artisan migrate:rollback
You may rollback a limited number of migrations by providing the step option to the rollback command. For example, the following command will rollback the last five migrations:
php artisan migrate:rollback --step=5
The migrate:reset command will roll back all of your application's migrations:
php artisan migrate:reset
You can check here. But i need to remove the specific migration file. As per my project having 30-40 migration file. I want to remove one of the migration file and its model. Is there any way to do this or have to do it manually.
Don’t. Migrations are version control for your database. “Removing” a particular migration is like removing a random commit from your Git repository’s history: it can have terrible consequences.
Instead, if you no longer need a table, then create a new migration that drops that table in the up method, and recreates it in the down method so the migration can be rolled back.
Delete the migration file, remove the table from the database, and also remove that file name from migrations table in the database.
Sometimes, doing things manually is the best way.
Just do it manually and save yourself the stress of further issues
Delete the model first (if you don't) need the model any longer
Delete the migration from ...database/migrations folder
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
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!
If you simply remove (delete) the migration file and re-run the migrations (migrate:refresh), the database tables will be rebuilt (without the table that's defined in the migration file you deleted).
you can increment the batch number of that particular migration to make it latest batch and run rollback command.
Rollback one specific migration in Laravel
I am working on a large project which has many migrations. I want to add a column in a table and I don't want to maintain multiple migrations for one table. How can I do that? Is there any way to migrate:refresh for only one migration?
I think migrations are designed to run sequentially as each one could depend on an earlier one.
For example, migration#1 could create a table and migration#2 could add some extra fields to that table. If you tried to run migration#2 without every having run #1 then it would fail.
When you run artisan migrate then it will only run migrations that haven't already been applied unless you use migrate:refresh in which case it will reset and re-run all migrations.
If you are dead-set on only running one migration - you could temporarily remove all the migrations you do not want run from the directory, and run the migration command. Then move the rest back. It's a hacky workaround, but it would do the trick.
There is ONE MORE alternative that I think might even suit you best:
php artisan migrate --path=/database/migrations/selected/
where the migration you want is inside the /selected/ directory (which you'll need to create).
You can create a new migration which will be adding new column, i.e.:
Schema::table('users', function (Blueprint $table) {
$table->string('additional_field');
});
And the run php artisan migrate
This will update your table with new column and not interfere with other tables.