Reputation: 1130
I want to add another column to my database table users. I made a new migration named Modify_users_table
which has the code to add the column. There is nothing wrong with the source code because I used it before, but it gives me an error that something is wrong with the table roles? How can I solve this? Here is the error and the code that is related to the error
Here is the migration Roles
:
public function up()
{
Schema::create('roles', function (Blueprint $table) {
$table->string('role_name')->length(55)->unique();
$table->increments('id');
$table->timestamps();
});
}
Upvotes: 0
Views: 1777
Reputation: 546
I had the same issue and I tried something like this and it works perfect for me. My Laravel version is 5.5.
public function up()
{
Schema::connection('mysql2')->create('images', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('image');
$table->timestamps();
});
}
public function down()
{
Schema::connection('mysql2')->dropIfExists('images');
}
I had to connections in my project one is mysql and other is mysql2 becuase my project is for database with multiple connections.
So my solution is that to try specifying the connection to your database in the function.
By default connection is mysql if you havent specifed it in the function, Example is given below. Hope this helps!
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email',60)->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('users');
}
And so when you migrate using php artisan it doesn't show errors,
Upvotes: 0
Reputation: 2030
You've got a number of problems. Your main problem is that you aren't adding a column to a table. Your script is instead trying to create a new table, as seen in this line:
Schema::create('roles', function (Blueprint $table) {
You said you are trying to add a column to the users table, but you aren't even working with the user's table: you are instead creating a table called roles
which already exists. The simplest solution is to do what Dhaval suggests: ditch the migration you are added, update the migration that creates the user tables, nuke and start over.
The "right" answer is to create a new migration and put in the instructions to add the column to the users table as well as instructions on removing it. Then you can just do a simple migration instead of nuking your database. That would look something like this:
public function up()
{
Schema::table('users', function ( Blueprint $table ) {
$table->string('last_name')->after( 'first_name' )->default( '' );
});
}
public function down()
{
Schema::table( 'users', function ( Blueprint $table ) {
$table->dropColumn( ['last_name'] );
});
}
Upvotes: 2
Reputation: 5147
remove the table from the database ( I did it manually the first time I had this issue)
and make this change in the create_users_table migration as such
$table->string('email', 60)->unique();
and this worked for me..
Hope this helps you as well
Upvotes: -1
Reputation: 2474
You need to run
php artisan migrate:rollback
if that also fails just go in and drop all the tables which you may have to do as it seems your migration table is messed up or your roles table when you ran a previous rollback did not drop the table.
or you can use migrate:reset
command will roll back all of your application's migrations:
php artisan migrate:reset
Upvotes: 0