Add new columns to existing table in a migration in Laravel
Solution 1
If you check at the error trace:
Base table or view already exists: 1050 Table 'users' already exists
This means that the users table already exists so when you run your migrations it is trying to create a table that is already created in your database.
Note: Don't forget to backup your database first
Delete users table from the database also delete users entries from migrations table.
After, execute the migrate Artisan command:php artisan migrate
Now another your Question is: How to add new columns in my existing table?
You have to create a table using this command:
php artisan make:migration create_users_table
The output you got it like this: Created Migration: 2019_04_12_070152_create_users_table
Your Migration structure is something this:
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
Now you want to add new columns in your existing users table
php artisan make:migration add_phone_number_to_users_table --table=users
use the Schema::table()
method (as you're accessing an existing table, not creating a new one). And you can add a column like this:
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('phonenumber')->after('name'); // use this for field after specific column.
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('phonenumber');
});
}
After, you can run your migrations: php artisan migrate
Your new columns(phonenumber
) are now added to your existing users table, which you can view in your database.
If you have still any doubt, see this video
Solution 2
Modifying current migration wont work, because it's entry in migration
table is already there. So to make any changes in already existing table, you need to create new migration script.
// remember `create` replaced by `table` here
Schema::table('users', function (Blueprint $table) {
// add whichever new columns you want to
});
Follow these steps,
php artisan make:migrate modify_user_table
- open
modify_user_table
file indatabase/migrations
directory Add new columns as at top I wrote.
Now save the file after adding new columns into new migration file
- cmd ->
php artisan migrate
EDIT
If there is no user data then Open
2014_10_12_000000_create_users_table.php
file and addSchema::dropIfExists('users');
beforeSchema::create('users'...
line.If there is data then you can take a backup, again follow the above step 1.
Solution 3
You need do little modification in your artisan command
artisan make:migration add_columns_to_users_table
You then need to use the Schema::table() method (as you're accessing an existing table, not creating a new one). And you can add a column like this
public function up()
{
Schema::table('users', function($table) {
$table->type('column');
});
}
add the rollback option:
public function down()
{
Schema::table('users', function($table) {
$table->dropColumn('column');
});
}
Then you can run your migrations:
php artisan migrate
Solution 4
Please do the step 1. php artisan migrate:reset Step 2: Go to your database using PHPmyadmin (or similar) and delete all remaining tables - including the migration table.
After all please do Step 3 php artisan migrate
Solution 5
The problem comes from the php artisan migrate
that will try to migrate both files when 2014_10_12_000000_create_users_table.php
is already migrated, so IMO two possible solutions here :
- Rollback the
users
table from the DB and rerun the migrate cmd. - Add the migration name inside the
migrations
table so the cmd will not try to run it for the second time.
Arafat Rahman
Updated on June 05, 2022Comments
-
Arafat Rahman almost 2 years
I want to add some new columns in my existing table
users
in laravel.I have already googling for that and following those search I have already created migration using the command
php artisan make:migration add_columns_to_users
.add_columns_to_users.php
public function up() { Schema::table('users', function($table) { $table->string('address'); $table->string('city'); $table->string('tribe'); $table->string('country'); $table->integer('student_id'); $table->string('tribe_university_name'); $table->string('student_program_of_study'); $table->string('faculty'); $table->string('level'); }); } public function down() { Schema::table('users', function($table) { $table->dropColumn('address'); $table->dropColumn('city'); $table->dropColumn('tribe'); $table->dropColumn('country'); $table->dropColumn('student_id'); $table->dropColumn('tribe_university_name'); $table->dropColumn('faculty'); $table->dropColumn('level'); }); }
After creation, I run this command
php artisan migrate
.But got the same error:
Base table or view already exists: 1050 Table 'users' already exists (SQL: create table
users
(id
int unsigned not null auto_increment primary key,name
varchar(255) not null,email
varchar(255) not null,password
varchar(255) not null,remember_token
varchar(100) null,created_at
timestamp null,updated_at
timestamp null) default character set utf8 collate utf8_unicode_ci)Full name of user table
2014_10_12_000000_create_users_table.php
and the other name is2019_04_11_074552_add_column_to_users.php
How to solve this?
My main query is How to add new columns in my existing table?
-
Zakaria Acharki about 5 yearsThis post doesn't fix the issue of the OP.
-
Rahul about 5 years@ZakariaAcharki Can you elaborate on why? This is the process we follow, to add new columns in the already migrated table. And its full proof and already tested process.
-
Zakaria Acharki about 5 yearsBecause the problem isn't in the process we follow to add new columns, he already followed the right process... So what's the point of telling him something he already did and we can see that from the Posted code.
-
Rahul about 5 yearsGot you mate! I will see what can I do. Thanks :)
-
Benjamin Beganović about 5 yearsThis is really awesome practice. Imagine Facebook one day decides to add new field, like
is_developer
, and um.. they have to reset all users. Clever. -
Rahul about 5 yearsget the backup of database. empty your database.
php artisan migrate
. remove migration table from that old backup and run that backup sql.i.e. import. It is must work solution if nothing works. -
Arafat Rahman about 5 years@RahulMeshram...it's awefull solution :(... Actually I don't want to do that...that's why all these tries
-
Rahul about 5 yearsif nothing works that's why I mentioned. Still check if there are still any efforts or alternatives left to try. Do this at last. Because sometimes it's Bermuda Triangle :)
-
Zakaria Acharki about 5 yearsWhat have you did until now? This is a simple issue that we may face in our daily work, you don't have to waste more time with it... Fix it and go on.
-
Francesco Taioli over 4 yearsi have a smarter and simplest solution... delete the db and run php artisan migrate.. hahahah @BenjaminBeganović
-
francisco about 2 years@BenjaminBeganović ofc just do
php artisan db:wipe
and thenphp artisan migrate --seed
to add the new stuff.