问题
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,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 is 2019_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?
回答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
回答2:
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.
回答3:
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.
回答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
回答5:
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
来源:https://stackoverflow.com/questions/55629242/add-new-columns-to-existing-table-in-a-migration-in-laravel