Единственный вариант, который мне известен, это через внедрение зависимостей.
Но я не представляю в какой части приложения это делают. Нужно создать подключение к БД в front-controller и поместить в DI-контейнер, и в дальнейшем использовать ? Или как ?
$container->set('db', function () use ($container) {
return new DbConnection($container->get('config')['db']);
});
$container->set('MyService', function () use ($container) {
return new MyService($container->get('db'));
});
можно ли к сторонней БД выполнить CIBlockElement::GetList и как это сделать?
const CONN_DEFAULT = '';
private static $poolDB = [];
final public static function changeGlobalDB(string $name = '')
{
global $DB;
if (empty(self::$poolDB)) {
self::$poolDB[self::CONN_DEFAULT] = $DB;
}
if (!isset(self::$poolDB[$name])) {
$conn = Application::getConnection($name)->getConfiguration();
self::$poolDB[$name] = new \CDatabase();
self::$poolDB[$name]->Connect($conn['host'], $conn['database'], $conn['login'], $conn['password'], $name);
}
return $DB = self::$poolDB[$name];
}
$method = 'getName';
$obj->$method(); // $obj->getName();
$method = 'getTitle';
$obj->$method(); // $obj->getTitle();
function GetShowedFunction()
{
return " IfNULL(BE.SHOW_COUNTER/((UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP(BE.SHOW_COUNTER_START)+0.1)/60/60),0) ";
}
::getList([
'runtime' => [
'ELEMENT' => new Main\Entity\ReferenceField(
'ELEMENT',
ElementTable::class,
[ // СМОТРИ ДОКУ ПО ORM: JOIN
'=this.UF_ORGANIZATION' => 'ref.ID',
],
['join_type' => 'INNER']
),
],
'select' => [
'ORGANIZATION_NAME' => 'ELEMENT.NAME',
]
])
[
'sort' => [
'new' => 'asc',
'price' => 'desc,
],
]