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: