connehito / cakephp-master-replica
Provides the features for multiple database connections as master/replica and switching.
Installs: 49 662
Dependents: 0
Suggesters: 0
Security: 0
Stars: 12
Watchers: 2
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: 2024-11-06 21:41:27 UTC
README
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.