Я использую две разные базы данных в своем приложении Phalcon.
Это работает в веб-приложении, когда у меня активен один аккаунт. Теперь у меня есть cronjob, который будет перебирать таблицу в глобальной базе данных «db». И после этого он собирается подключиться к конкретной базе данных «db_data».
Это работает для первой учетной записи, но после этого она не будет подключаться к новой базе данных. Он все еще использует первую инициированную базу данных.
Служба db_data является общей службой в services.php:
$di->set('db_data', function () use ($config, $di) {
if(!$di->getCore()->getAccount()) {
throw new \MyNamespace\Exception(_('Account is not set. Can not load account database.'));
}
$eventsManager = $di->getShared('eventsManager');
$dbListener = new \MyNamespace\Module\Core\Helper\Model\DatabaseListener();
$eventsManager->attach('db_data', $dbListener);
$connection = new \Phalcon\Db\Adapter\Pdo\Mysql(array(
'host' => $config->database->host,
'username' => $config->database->username,
'password' => $config->database->password,
'dbname' => $config->database->data_dbname_prefix.$di->getCore()->getAccount()->id,
'name' => 'data',
));
$connection->setEventsManager($eventsManager);
return $connection;
}, true);
В первой модели в «db» у меня есть следующее в функции initialize ():
$this->setConnectionService('db');
Во второй модели в «db_data» у меня есть следующее в функции initialize ():
$this->setConnectionService('db_data');
Вот пример PHP-файла cron:
$screens = \MyNamespace\Module\DigitalSignage\Model\Screen::find(array(
'conditions' => 'deleted_at IS NULL',
));
foreach($screens as $screen) {
$console->getDi()->getCore()->setAccount(\MyNamespace\Module\Core\Model\Account::findFirst('id='.$screen->account_id));
$campaign = \MyNamespace\Module\DigitalSignage\Model\Campaign::findFirst(array(
'conditions' => 'id = :id: AND account_id = :account_id: AND deleted_at IS NULL',
'bind' => array(
'id' => $screen->digitalsignage_campaign_id,
'account_id' => $console->getDi()->getCore()->getAccount()->id,
),
));
var_dump($campaign);
}
Как правильно изменить параметры службы базы данных после первого запуска?
Версия Phalcon: 3.2.2 Версия PHP: 7.0.22
Задача ещё не решена.
Других решений пока нет …