UMIhelp

Разработка дополнительного функционала => Custom макросы => Тема начата: atach от 26 Апреля 2017, 13:19:00

Название: Подключение ко вторй DB Mysql, для переноса информации
Отправлено: atach от 26 Апреля 2017, 13:19:00
Как подключиться ко второй БД понятно, через ConnectionPool
$pool = ConnectionPool::getInstance();
$pool->addConnection("newDB", "localhost", "user", "pass", "dynamo");
$pool->init();
$conn = $pool->getConnection('newDB');

Для простых SQL запросов схема понятна, но если я использую выборку UMI Selector
$users = new selector('objects');
$users->types('object-type')->name('users', 'user');

То всеравно подключение идет к базе основной CORE.
А вообще задача стоит перенести всех пользователей, новости и т.п. на новый проект. Может есть какой то другой способ.
Название: Re: Подключение ко вторй DB Mysql, для переноса информации
Отправлено: e.ioffe от 26 Апреля 2017, 23:01:58
Цитировать
А вообще задача стоит перенести всех пользователей, новости и т.п. на новый проект. Может есть какой то другой способ.

Можно попробовать через UmiDump (если проект с нуля).

Я для переноса товаров и разделов с одного проекта на другой (оба проекта на UMI) писал экспортер в формате xlsx на первом проекте и импортер из этого формата на втором. UmiDump не подошел, так как переносил слишком много ненужной информации.
Название: Re: Подключение ко вторй DB Mysql, для переноса информации
Отправлено: atach от 26 Апреля 2017, 23:03:01
Я тоже рассматривал этот вариант, но мне кажется проще подключаясь к одной базе, вытягивать её в другую. Понять бы только как
Название: Re: Подключение ко вторй DB Mysql, для переноса информации
Отправлено: e.ioffe от 26 Апреля 2017, 23:47:59
Как вариант, подменять основный connection своим, а потом обратно. Что-то вроде

$pool = ConnectionPool::getInstance();
$pool->addConnection("core", "localhost", "user", "pass", "dynamo");
$pool->init();

Код получения данных из старой базы

$pool->addConnection("core", "localhost", "new_user", "new_pass", "new_db");
$pool->init();

Код загрузки данных в новую базу

Смущает встроенное кеширование в юми (после каждого вызова нужно будет как минимум очищать кеш umiObjectsCollection и umiHierarchy) + непредсказуемые результаты.

Я бы написал для каждого типа данных свой экспортер / импортер, и запускал их друг за другом.