Inside this tutorial we will see CakePHP 4 Multiple Database Using ConnectionManager. We will use the concept of ConnectionManager of CakePHP to create a database connection object. The created instance will perform all operations like insert, update, delete and select.
There are several ways to perform database operations – Using Query Builder, Using Model & Entity, ConnectionManager.
Here, we will see how to connect with multiple database and work using Connection Manager.
Suppose we have a table called products into primary database (default). Also we have a secondary database otherDb in which we have a table called students. We will see how to connect application with these databases and work with it. Article contains classified information about this concept.
Learn More –
- CakePHP 4 Connect Models with Multiple Databases
- CakePHP 4 Database Operations Using ConnectionManager
- CakePHP 4 Database Seeding From CSV File Tutorial
- CakePHP 4 Database Seeding From JSON File Tutorial
Let’s get started.
CakePHP 4 Installation
To create a CakePHP project, run this command into your shell or terminal. Make sure composer should be installed in your system.
$ composer create-project --prefer-dist cakephp/app:~4.0 mycakephp
Above command will creates a project with the name called mycakephp.
Database Settings
By default in CakePHP, default & test connections are available. Here we will create another datasource as otherDb.
So, we will use two database connections – default & otherDb.
Step #1
Open app.php from /config folder. Search for Datasources into it. Add this database array into it (secondary database).
//... 'Datasources' => [ 'default' => [ //... ], 'test' => [ //... ], 'otherDb' => [ 'className' => Connection::class, 'driver' => Mysql::class, 'persistent' => false, 'timezone' => 'UTC', //'encoding' => 'utf8mb4', 'flags' => [], 'cacheMetadata' => true, 'quoteIdentifiers' => false, 'log' => false, //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'], ], ] //...
otherDb details are just copied and pasted as test had. Nothing extra we have added. Keep application and understanding as well as that.
Step #2
We need to create connect secondary database (otherDb) connection to application.
Open app_local.php file from /config folder. Search for Datasources. We will add the otherDb connection string values into it.
//... 'Datasources' => [ 'default' => [ 'host' => 'localhost', 'username' => 'admin', 'password' => 'Admin@123', 'database' => 'database2', 'url' => env('DATABASE_URL', null), ], 'otherDb' => [ 'host' => 'localhost', 'username' => 'admin', 'password' => 'Admin@123', 'database' => 'database1', 'url' => env('DATABASE_URL', null), ], ] //...
Now, we are able to connect models with either primary database (default) or secondary database (otherDb).
Connection Manager Instance
ConnectionManager is a class in CakePHP. We use get() method to get the instance of database group. The ConnectionManager
class acts as a registry to access database connections your application has. It provides a place that other objects can get references to existing connections.
use Cake\Datasource\ConnectionManager;
To create database instance using Connection Manager, we use like this –
Connection with default group of database.
$primary = ConnectionManager::get("default");
Connection with otherDb group of database.
$secondary = ConnectionManager::get("otherDb");
We will use the returned connection object to perform insert, update, delete and select operations.
Create Controller
To create controller we will use bake console command –
$ bin/cake bake controller Sites --no-actions
It will create a file SitesController.php inside /src/Controller folder.
<?php declare(strict_types=1); namespace App\Controller; use Cake\Datasource\ConnectionManager; class SitesController extends AppController { private $primary; private $secondary; public function initialize(): void { parent::initialize(); // Connection to default database group $this->primary = ConnectionManager::get("default"); // Connection to other database group $this->secondary = ConnectionManager::get("otherDb"); $this->autoRender = false; } // Select all rows using default connection manager instance public function selectAllProduct() { $products = $this->primary ->newQuery() ->select('*') ->from('products') ->execute() ->fetchAll('assoc'); print_r($products); } // Select all rows using otherDb connection manager instance public function selectAllStudent() { $students = $this->secondary ->newQuery() ->select('*') ->from('students') ->execute() ->fetchAll('assoc'); print_r($students); } }
In the above code we can see we have connected with two database connections primary & secondary.
Right now we have performed only select operations. But you can use the same connection concept to perform all other database operations like – Insert, Update, Delete, Select using Conditional Statements.
Create Routes
Open routes.php from /config folder. Add these routes into it.
//... // Product Route $routes->connect( '/products', ['controller' => 'Sites', 'action' => 'selectAllProduct'] ); // Student Route $routes->connect( '/students', ['controller' => 'Sites', 'action' => 'selectAllStudent'] ); //...
Application Testing
Open project and run this command to start development server.
$ bin/cake server
URL: http://localhost:8765/
- All Products: http://localhost:8765/products
- All Students: http://localhost:8765/students
We hope this article helped you to learn about CakePHP 4 Multiple Database Using ConnectionManager Tutorial in a very detailed way.
If you liked this article, then please subscribe to our YouTube Channel for PHP & it’s framework, WordPress, Node Js video tutorials. You can also find us on Twitter and Facebook.