Skip to content

Instantly share code, notes, and snippets.

@JulienBreux
Created April 2, 2012 22:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save JulienBreux/2287568 to your computer and use it in GitHub Desktop.
Save JulienBreux/2287568 to your computer and use it in GitHub Desktop.
PrestaShop 1.5.x - Database Factory
<?php
/**
* Database Factory
* Use this factory for connections to external databases
*
* @version 1.0.0
* @author Julien BREUX <julien.breux@prestashop.com>
*/
class DbFactoryCore
{
/** @const string Default adapter */
const DEFAULT_ADAPTER = 'MySQL';
/** @var array Instances */
protected static $_instances = array();
/** @var array List of servers settings */
protected static $_servers = array();
/**
* Dynamic add server
*
* @static
* @param $server_name string Alias name of server
* @param $host string Host (e.g. localhost)
* @param $user string User (e.g. root)
* @param $password string Password
* @param $database string Database (e.g. prestashop)
* @param string $adapter Adapter (e.g. MySQL, MySQLi, PDO, etc.)
*/
public static function addServer($server_name, $host, $user, $password, $database, $adapter = self::DEFAULT_ADAPTER)
{
self::$_servers[$server_name] = (object)array(
'host' => $host,
'user' => $user,
'password' => $password,
'database' => $database,
'adapter' => $adapter,
);
}
/**
* Get Instance By Server
*
* @static
* @param $server_name string Alias name of server
* @return mixed
* @throws DbFactoryException
*/
public static function getInstanceByServer($server_name)
{
if (!array_key_exists($server_name, self::$_servers))
throw new DbFactoryServerNotSetException(sprtinf('The server %s is not set', $server_name));
$class = self::$_servers[$server_name]->adapter;
if (!array_key_exists($server_name, self::$_instances))
self::$_instances[$server_name] = new $class(
self::$_servers[$server_name]->host,
self::$_servers[$server_name]->user,
self::$_servers[$server_name]->password,
self::$_servers[$server_name]->database
);
return self::$_instances[$server_name];
}
}
/**
* Database Factory Exception
* Server Not Set
*
* @author Julien Breux <julien.breux@prestashop.com>
* @version 1.0.0
*/
class DbFactoryServerNotSetException extends Exception {}
<?php
require dirname(__FILE__).'/config/config.inc.php';
// Add externals servers
DbFactory::addServer('primary', 'host_1', 'user_1', '****', 'database_1');
DbFactory::addServer('secondary', 'host_2', 'user_2', '****', 'database_2');
DbFactory::addServer('tertiary', 'host_3', 'user_3', '****', 'database_3');
DbFactory::addServer('quaternary', 'host_4', 'user_4', '****', 'database_4');
// ...
// Primary instance
$primary = DbFactory::getInstanceByServer('primary');
// Secondary instance
$secondary = DbFactory::getInstanceByServer('secondary');
// Tertiary instance
$tertiary = DbFactory::getInstanceByServer('tertiary');
// Quaternary instance
$quaternary = DbFactory::getInstanceByServer('quaternary');
// ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment