PHP Class Doctrine\DBAL\Connections\MasterSlaveConnection

Connection can be used with master-slave setups. Important for the understanding of this connection should be how and when it picks the slave or master. 1. Slave if master was never picked before and ONLY if 'getWrappedConnection' or 'executeQuery' is used. 2. Master picked when 'exec', 'executeUpdate', 'insert', 'delete', 'update', 'createSavepoint', 'releaseSavepoint', 'beginTransaction', 'rollback', 'commit', 'query' or 'prepare' is called. 3. If master was picked once during the lifetime of the connection it will always get picked afterwards. 4. One slave connection is randomly picked ONCE during a request. ATTENTION: You can write to the slave with this connection if you execute a write query without opening up a transaction. For example: $conn = DriverManager::getConnection(...); $conn->executeQuery("DELETE FROM table"); Be aware that Connection#executeQuery is a method specifically for READ operations only. This connection is limited to slave operations using the Connection#executeQuery operation only, because it wouldn't be compatible with the ORM or SchemaManager code otherwise. Both use all the other operations in a context where writes could happen to a slave, which makes this restricted approach necessary. You can manually connect to the master at any time by calling: $conn->connect('master'); Instantiation through the DriverManager looks like:
Author: Lars Strojny ([email protected])
Author: Benjamin Eberlei ([email protected])
Inheritance: extends Doctrine\DBAL\Connection
Show file Open project: doctrine/dbal Class Usage Examples

Protected Properties

Property Type Description
$connections Doctrine\DBAL\Driver\Connection[] Master and slave connection (one of the randomly picked slaves).
$keepSlave boolean You can keep the slave connection and then switch back to it during the request if you know what you are doing.

Public Methods

Method Description
__construct ( array $params, Doctrine\DBAL\Driver $driver, Doctrine\DBAL\Configuration $config = null, Doctrine\Common\EventManager $eventManager = null ) Creates Master Slave Connection.
beginTransaction ( ) {@inheritDoc}
close ( ) {@inheritDoc}
commit ( ) {@inheritDoc}
connect ( $connectionName = null ) {@inheritDoc}
createSavepoint ( $savepoint ) {@inheritDoc}
delete ( $tableName, array $identifier, array $types = [] ) {@inheritDoc}
exec ( $statement ) {@inheritDoc}
executeUpdate ( $query, array $params = [], array $types = [] ) {@inheritDoc}
insert ( $tableName, array $data, array $types = [] ) {@inheritDoc}
isConnectedToMaster ( ) : boolean Checks if the connection is currently towards the master or not.
prepare ( $statement ) {@inheritDoc}
query ( ) {@inheritDoc}
releaseSavepoint ( $savepoint ) {@inheritDoc}
rollBack ( ) {@inheritDoc}
rollbackSavepoint ( $savepoint ) {@inheritDoc}
update ( $tableName, array $data, array $identifier, array $types = [] ) {@inheritDoc}

Protected Methods

Method Description
chooseConnectionConfiguration ( string $connectionName, array $params ) : mixed
connectTo ( string $connectionName ) : Doctrine\DBAL\Driver Connects to a specific connection.

Method Details

__construct() public method

Creates Master Slave Connection.
public __construct ( array $params, Doctrine\DBAL\Driver $driver, Doctrine\DBAL\Configuration $config = null, Doctrine\Common\EventManager $eventManager = null )
$params array
$driver Doctrine\DBAL\Driver
$config Doctrine\DBAL\Configuration
$eventManager Doctrine\Common\EventManager

beginTransaction() public method

{@inheritDoc}
public beginTransaction ( )

chooseConnectionConfiguration() protected method

protected chooseConnectionConfiguration ( string $connectionName, array $params ) : mixed
$connectionName string
$params array
return mixed

close() public method

{@inheritDoc}
public close ( )

commit() public method

{@inheritDoc}
public commit ( )

connect() public method

{@inheritDoc}
public connect ( $connectionName = null )

connectTo() protected method

Connects to a specific connection.
protected connectTo ( string $connectionName ) : Doctrine\DBAL\Driver
$connectionName string
return Doctrine\DBAL\Driver

createSavepoint() public method

{@inheritDoc}
public createSavepoint ( $savepoint )

delete() public method

{@inheritDoc}
public delete ( $tableName, array $identifier, array $types = [] )
$identifier array
$types array

exec() public method

{@inheritDoc}
public exec ( $statement )

executeUpdate() public method

{@inheritDoc}
public executeUpdate ( $query, array $params = [], array $types = [] )
$params array
$types array

insert() public method

{@inheritDoc}
public insert ( $tableName, array $data, array $types = [] )
$data array
$types array

isConnectedToMaster() public method

Checks if the connection is currently towards the master or not.
public isConnectedToMaster ( ) : boolean
return boolean

prepare() public method

{@inheritDoc}
public prepare ( $statement )

query() public method

{@inheritDoc}
public query ( )

releaseSavepoint() public method

{@inheritDoc}
public releaseSavepoint ( $savepoint )

rollBack() public method

{@inheritDoc}
public rollBack ( )

rollbackSavepoint() public method

{@inheritDoc}
public rollbackSavepoint ( $savepoint )

update() public method

{@inheritDoc}
public update ( $tableName, array $data, array $identifier, array $types = [] )
$data array
$identifier array
$types array

Property Details

$connections protected property

Master and slave connection (one of the randomly picked slaves).
protected Connection[],Doctrine\DBAL\Driver $connections
return Doctrine\DBAL\Driver\Connection[]

$keepSlave protected property

You can keep the slave connection and then switch back to it during the request if you know what you are doing.
protected bool $keepSlave
return boolean