connehito / cakephp-master-replica
Provides the features for multiple database connections as master/replica and switching.
Installs: 56 148
Dependents: 0
Suggesters: 0
Security: 0
Stars: 12
Watchers: 1
Forks: 2
Open Issues: 0
Type:cakephp-plugin
Requires
- php: >=7.2
- cakephp/database: ^4.0
Requires (Dev)
- cakephp/cakephp: ^4.0
- cakephp/cakephp-codesniffer: ^4.0
- phpunit/phpunit: ^8.5
This package is auto-updated.
Last update: 2025-03-07 04:11:53 UTC
README
Use CakePHP native features introduced from 4.5 if you want to switch Database roles.
This project has been archived and is no longer actively maintained because several years have passed without active maintenance.
We appreciate the support and contributions from the community over the years. While this repository will remain available in read-only mode, there will be no further updates or maintenance. Thank you for your understanding and support.
The datasource for CakePHP.This plugin enables one-connection to act as two(or more) roles, like master(read-write) and replica(read-only).
Supports
- PHP 7.2+
- CakePHP 4.0+
💡 For CakePHP3.x, use 1.x
branch.
Usage
- Install plugin
composer require connehito/cakephp-master-replica
- Set your connections(e.g. in
config/app.php
datasource. It requiresroles
property.
Example
Set up your database configuration.
- Databse-A(for master): mysql;host=db-host,databasename=app_db,login=root,pass=password
- Databse-B(for replica): mysql;host=db-host,databasename=app_db,login=read-only-user,pass=another-password
- Databse-C(for replica): mysql;host=replica-host,databasename=app_db,login=read-only-user,pass=another-password
// app.php // return [ 'Datasources' => [ 'driver' => Cake\Database\Driver\Mysql::class, 'className' => Connehito\CakephpMasterReplica\Database\Connection\MasterReplicaConnection::class, 'host' => 'replica-host', 'database' => 'app_db', 'roles' => [ 'master' => ['host' => 'db-host', 'username' => 'root', 'password' => 'password'], 'secondary' => ['host' => 'db-host', 'username' => 'read-only-user', 'password' => 'another-password'], 'tertiary' => ['username' => 'read-only-user', 'password' => 'another-password'], ] ]
In each roles, you can set specific values and override them.
In app, now you can connect to database master or replica db as you like 🎉
// as default, connect with `master` role. $usersTable->save($usersTable->newEntity(['name' => 'hoge'])); // switch to `replica` role \Cake\Datasource\ConnectionManager::get('default')->switchRole('secondary'); // Or you can get Connection via Table $usersTable->getConnection()->switchRole('tertiary');
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/Connehito/cakephp-master-replica
- Please fix all problems with PHPUnit, PHPStan, PHP_CodeSniffer before send pull request 😄
- You can build development env in local with
tests/test_app/docker-compose.yml
🏇
License
The plugin is available as open source under the terms of the MIT License.