I am learning migration in Laravel. I have created a migration file and migrations seems to work fine from command line. But inside my mysql file the username column is not created after migration.
>php artisan make:migration add_username_to_users_table Created Migration: 2022_07_15_123530_add_username_to_users_table >php artisan migrate Migrating: 2022_07_15_123530_add_username_to_users_table Migrated: 2022_07_15_123530_add_username_to_users_table (31.34ms)
Migration file:
<?php use IlluminateDatabaseMigrationsMigration; use IlluminateDatabaseSchemaBlueprint; use IlluminateSupportFacadesSchema; return new class extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('users', function (Blueprint $table) { $table->string('username'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('users', function (Blueprint $table) { $table->dropColumn('username'); }); } };
users table in mysql database: No username column created
MariaDB [julai_pro]> describe users; +-------------------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------------+---------------------+------+-----+---------+----------------+ | id | bigint(20) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(255) | NO | | NULL | | | email | varchar(255) | NO | UNI | NULL | | | email_verified_at | timestamp | YES | | NULL | | | password | varchar(255) | NO | | NULL | | | remember_token | varchar(100) | YES | | NULL | | | created_at | timestamp | YES | | NULL | | | updated_at | timestamp | YES | | NULL | | +-------------------+---------------------+------+-----+---------+----------------+ 8 rows in set (1.265 sec)
And when refresh my migration it gives me the below error
>php artisan migrate:refresh Rolling back: 2022_07_15_123530_add_username_to_users_table IlluminateDatabaseQueryException SQLSTATE[42000]: Syntax error or access violation: 1091 Can't DROP COLUMN `username`; check that it exists (SQL: alter table `users` drop `username`) -appvendorlaravelframeworksrcIlluminateDatabaseConnection.php:759 755▕ // If an exception occurs when attempting to run a query, we'll format the error 756▕ // message to include the bindings with SQL, which will make this exception a 757▕ // lot more helpful to the developer instead of just the database's errors. 758▕ catch (Exception $e) { ➜ 759▕ throw new QueryException( 760▕ $query, $this->prepareBindings($bindings), $e 761▕ ); 762▕ } 763▕ } 1 -appvendorlaravelframeworksrcIlluminateDatabaseConnection.php:544 PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1091 Can't DROP COLUMN `username`; check that it exists") 2 -appvendorlaravelframeworksrcIlluminateDatabaseConnection.php:544 PDOStatement::execute() >php artisan migrate Nothing to migrate.
Option1 : I tried to solve this with the below command with success.
>php artisan cache:clear Application cache cleared successfully. >php artisan config:cache Configuration cache cleared successfully. Configuration cached successfully.
Option 2 : I also tried the option from @Udhav Sarvaiya
Open your app/Providers/AppServiceProvider.php file and inside the boot() method set a default string length:
use IlluminateSupportFacadesSchema; public function boot() { Schema::defaultStringLength(191); }
None of the options solved the problem the username Column is not created in users table. Kindly assist.
Edit: the migration table in database
MariaDB [julai_pro]> select * from migrations; +----+-------------------------------------------------------+-------+ | id | migration | batch | +----+-------------------------------------------------------+-------+ | 1 | 2014_10_12_000000_create_users_table | 1 | | 2 | 2014_10_12_100000_create_password_resets_table | 1 | | 3 | 2019_08_19_000000_create_failed_jobs_table | 1 | | 4 | 2019_12_14_000001_create_personal_access_tokens_table | 1 | | 5 | 2022_07_15_123530_add_username_to_users_table | 2 | +----+-------------------------------------------------------+-------+ 5 rows in set (0.056 sec)
Advertisement
Answer
php artisan migrate:refresh
first rolls back all your migrations then runs it again you would want to do php artisan migrate
to add a migration and php artisan migrate:fresh
if you would like it to wipe the database first
> php artisan migrate Nothing to migrate.
you can look in the migrations
table to see which migrations ran