artisan migration error "Class 'Doctrine\\DBAL\\Driver\\PDOMySql\\Driver' not found",
PhpLaravelSymfonyLaravel 5Php Problem Overview
When trying to run a migration I get the error Artisan migration
> error:Class 'Doctrine\\DBAL\\Driver\\PDOMySql\\Driver' not found
I have read the questions here and also see the notes to add:
doctrine/dbal": "~2.3
in the requires section of composer.json
However, I don't understand what has happened. I created table a few days ago with no issue.
I can't figure out what to do after adding that dependency in composer.son.
I don't want to accidentally update any other packages.
Php Solutions
Solution 1 - Php
The doctrine/dbal
dependency needs to be added to your composer.json
composer require doctrine/dbal
For more information check laravel #Modifying Columns
Solution 2 - Php
In my case both composer install and composer install was not working giving a same error “Class 'Doctrine\DBAL\Driver\PDOMySql\Driver' not found”,
The changes that i made to make this workable are given below
composer.json file changed
"doctrine/dbal": "^3.0",
this changed with
"doctrine/dbal": "^2.0",
then run the command
composer update
Solution 3 - Php
You have to downgrade the current version, this is what worked for me:
composer require doctrine/dbal:2.*
Solution 4 - Php
If you using doctrine 3, downgrade to "doctrine/dbal": "^2.10.3"
(I don't know does laravel updated migration tools for doctrine 3. If do, you should update laravel tools).
They renamed class and Doctrine\\DBAL\\Driver\\PDOMySql\\Driver
not exists
Solution 5 - Php
Laravel
Who ever is facing this issue while having doctrine/dbal": "3.0" aleady required: downgrade it back to
"doctrine/dbal": "^2.10".
If you still face issues for example getting
> Laravel\Passport\Bridge\AccessToken::__toString() must not throw an > exception
You should require a prev version of lcobucci/jwt. It just got auto updated to 3.4, which caused these issues for me. Took me around 3-4 hours to track everything down to this. Hope it helps someone else too.
composer require lcobucci/jwt 3.3.3
Solution 6 - Php
As already said, use composer require doctrine/dbal
, if for whatever reason that doesn't work, use a lower version like composer require doctrine/dbal:^2.12.1
and then run composer dumpautoload -o
.
Solution 7 - Php
# For Laravel 6x/7x:
composer require doctrine/dbal:"^2.0"
# For Laravel >= 8x:
composer require doctrine/dbal
Solution 8 - Php
Run
composer update
It will install your missing packages like PDOMySql.
Or
Delete vendor folder and run
composer install
Solution 9 - Php
This message shows up if you want to edit column in a database.
To solve it do:
- add
doctrine/dbal
dependency tocomposer.json
- and use the
composer require doctrine/dbal
command
Solution 10 - Php
If you are using laravel 7 then please downgrade the "doctrine/dbal"
From
doctrine/dbal:"^3.1"
To
doctrine/dbal:"^2.0"
and then run
composer update
It works for me
Solution 11 - Php
just run
composer update
worked for me Laravel 8
Solution 12 - Php
Before modifying a column, be sure to add the doctrine/dbal dependency to your composer.json file. The Doctrine DBAL library is used to determine the current state of the column and create the SQL queries needed to make the specified adjustments to the column:
composer require doctrine/dbal
Solution 13 - Php
I had the same problem with Laravel 8.
composer require doctrine/dbal
composer update
didn't help me to solve the issue.
I used DB::statement('SQLQuery') to solve the issue. I used below code to rename the column.
public function up()
{
Schema::table('customer_profile', function (Blueprint $table) {
// $table->renameColumn('user_type_id','plan_id');
});
DB::statement('ALTER TABLE `customer_profile` CHANGE `user_type_id` `plan_id` BIGINT(20) NOT NULL;');
}
Solution 14 - Php
In my case, it was due to the version of php that did not meet the necessary requirements for that version of the package.
So, updating to any previous version is not the solution, you have to look at the requirements of each version of the package and confirm that your project complies with them.
Here the specification of the requirements: https://packagist.org/packages/doctrine/dbal#3.1.3
And the command to update the library would be:
composer require doctrine/dbal:number_of_your_indicated_version
For example:
composer require doctrine/dbal:^2.13.5
Solution 15 - Php
Can you share your current composer.json?
After composer.json update, you can execute composer install. It won't update existing packages (because of generated composer.lock), it'll only install new ones.
What has changes since your last migration?
It's the same project in the same directory? If so, it should be there.
Solution 16 - Php
OK thanks so much for the help. Stupidly, I had read that to do some other operations, that missing driver is called and I had tried to run a migration the other day to change a column name and what I completely forgot was that subsequent migrate runs are trying to still run that bad one. Once i remembered and deleted the update column name migration, my add table migration ran fine. With a project due in a few weeks, no package updates for me!!
Solution 17 - Php
I saw this: To rename a column, you may use the renameColumn method on the Schema builder. Before renaming a column, be sure to add the doctrine/dbal dependency to your composer.json file:
it maybe work.