vanam / kdyby-doctrine-mysql-come-back
Auto reconnect on Doctrine MySql has gone away exceptions on doctrine/dbal with Kdyby/Doctrine compatibility. This is a fork of https://github.com/facile-it/doctrine-mysql-come-back
Requires
- doctrine/dbal: >=2.3,<2.6-dev
- kdyby/doctrine: ^2.3
This package is not auto-updated.
Last update: 2024-05-11 16:07:37 UTC
README
Auto reconnect on Doctrine MySql has gone away exceptions on doctrine/dbal >=2.3,<2.6-dev with Kdyby/Connection extension.
Installation
$ composer require vanam/kdyby-doctrine-mysql-come-back dev-master
Configuration
In order to use KdybyDoctrineMySQLComeBack you have to set wrapperClass
and driverClass
connection params.
You can choose how many times Doctrine should be able to reconnect, setting x_reconnect_attempts
driver option. Its value should be an int.
An example of configuration at connection instantiation time:
use Doctrine\DBAL\Configuration; use Doctrine\DBAL\DriverManager; $config = new Configuration(); //.. $connectionParams = array( 'dbname' => 'mydb', 'user' => 'user', 'password' => 'secret', 'host' => 'localhost', // [doctrine-mysql-come-back] settings 'wrapperClass' => 'Facile\DoctrineMySQLComeBack\Doctrine\DBAL\Connection', 'driverClass' => 'Facile\DoctrineMySQLComeBack\Doctrine\DBAL\Driver\PDOMySql\Driver', 'driverOptions' => array( 'x_reconnect_attempts' => 3 ) ); $conn = DriverManager::getConnection($connectionParams, $config); //..
An example of neon configuration on Nette projects:
# config.neon doctrine: driverClass: Facile\DoctrineMySQLComeBack\Doctrine\DBAL\Driver\PDOMySql\Driver wrapperClass: Facile\DoctrineMySQLComeBack\Doctrine\DBAL\Connection host: %database.host% user: %database.user% password: %database.password% dbname: %database.dbname% driverOptions: x_reconnect_attempts: 3 metadata: App: %appDir% # namespace with models in Nette app
An example of yaml configuration on Symfony 2 projects:
# Doctrine example Configuration doctrine: dbal: default_connection: %connection_name% connections: %connection_name%: host: %database_host% port: %database_port% dbname: %database_name% user: %database_user% password: %database_password% charset: UTF8 wrapper_class: 'Facile\DoctrineMySQLComeBack\Doctrine\DBAL\Connection' driver_class: 'Facile\DoctrineMySQLComeBack\Doctrine\DBAL\Driver\PDOMySql\Driver' options: x_reconnect_attempts: 3
Usage
To force a reconnection try after a long running task you can call
$em->getConnection()->refresh();
before performing any other operation different from SELECT.
Instead, in case your next query will be a SELECT, reconnection will be automagically done.
Thanks
Thanks to Dieter Peeters and his proposal on DBAL-275. Check it out if you are using doctrine/dbal <2.3.