While dbal is definitely the cleanest way, I also used a helper, cause some third party extensions in my system made the usage of dbal impossible.
You can instantiate a completely new db connection as a simple utility.
<?php
namespace FOO\YourExt\Utility;
use TYPO3\CMS\Core\Utility\GeneralUtility;
/**
* Database utility
*/
class DatabaseUtility
{
private static $config = 'External';
/**
* Instantiate custom queryBuilder for different database config
*
* @return type
*/
public static function queryBuilder()
{
$cObj = GeneralUtility::makeInstance('TYPO3\\CMS\\Frontend\\ContentObject\\ContentObjectRenderer');
$objectManager = GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager');
$connectionPool = $objectManager->get('TYPO3\\CMS\\Core\\Database\\ConnectionPool');
$externalConnection = $connectionPool->getConnectionByName(self::$config);
$queryBuilder = $externalConnection->createQueryBuilder();
return $queryBuilder;
}
/**
* Instantiate custom connectionPool for different database config
*
* @return type
*/
public static function connectionPool()
{
$cObj = GeneralUtility::makeInstance('TYPO3\\CMS\\Frontend\\ContentObject\\ContentObjectRenderer');
$objectManager = GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager');
$connectionPool = $objectManager->get('TYPO3\\CMS\\Core\\Database\\ConnectionPool');
$externalConnection = $connectionPool->getConnectionByName(self::$config);
return $externalConnection;
}
}
You can use any database connection defined in your LocalConfiguration.php
.
[...]
'DB' => [
'Connections' => [
'Default' => [],
'External' => [
'charset' => 'utf8',
'dbname' => 'external_database_name',
'driver' => 'mysqli',
'host' => '',
'password' => '',
'port' => 3306,
'user' => '',
],
],
],
[...]