Как запросить с несколькими базами данных соединение с Propel - PullRequest
0 голосов
/ 09 октября 2019

Я провел много исследований, чтобы прочитать несколько документов, но я не нашел ответа.

У меня есть 2 базы данных, связанные через мой propel config. Они имеют одинаковую структуру, одинаковые таблицы.

На данный момент я создал файл schema.xml для каждой базы данных: db1.schema.xml и db2.schema.xml

Iизменил мой config.php:

<?php
$serviceContainer = \Propel\Runtime\Propel::getServiceContainer();
$serviceContainer->checkVersion('2.0.0-dev');
$serviceContainer->setAdapterClass('db1', 'mysql');
$manager = new \Propel\Runtime\Connection\ConnectionManagerSingle();
$manager->setConfiguration(array (
  'dsn' => 'mysql:host=localhost;port=3306;dbname=db1',
  'user' => 'root',
  'password' => '',
  'settings' =>
  array (
    'charset' => 'utf8',
    'queries' =>
    array (
    ),
  ),
  'classname' => '\\Propel\\Runtime\\Connection\\ConnectionWrapper',
  'model_paths' =>
  array (
    0 => 'src',
    1 => 'vendor',
  ),
));
$manager->setName('db1');
$serviceContainer->setConnectionManager('db1', $manager);
$serviceContainer->setDefaultDatasource('db1');

$serviceContainer2 = \Propel\Runtime\Propel::getServiceContainer();
$serviceContainer2->checkVersion('2.0.0-dev');
$serviceContainer2->setAdapterClass('db2', 'mysql');
$manager2 = new \Propel\Runtime\Connection\ConnectionManagerSingle();
$manager2->setConfiguration(array (
  'dsn' => 'mysql:host=localhost;port=3306;dbname=db2',
  'user' => 'root',
  'password' => '',
  'settings' =>
  array (
    'charset' => 'utf8',
    'queries' =>
    array (
    ),
  ),
  'classname' => '\\Propel\\Runtime\\Connection\\ConnectionWrapper',
  'model_paths' =>
  array (
    0 => 'src',
    1 => 'vendor',
  ),
));
$manager2->setName('db2');
$serviceContainer2->setConnectionManager('db2', $manager);
$serviceContainer2->setDefaultDatasource('db2');

Я также изменил свой файл propel.json:

{
    "propel": {
        "database": {
            "connections": {
                "db1": {
                    "adapter": "mysql",
                    "dsn": "mysql:host=localhost;port=3306;dbname=db1",
                    "user": "root",
                    "password": null,
                    "settings": {
                        "charset": "utf8"
                    }
                },
                "db2": {
                    "adapter": "mysql",
                    "dsn": "mysql:host=localhost;port=3306;dbname=db2",
                    "user": "root",
                    "password": null,
                    "settings": {
                        "charset": "utf8"
                    }
                }
            }
        },
        "runtime": {
            "defaultConnection": "db1",
            "connections": ["db1", "db2"]
        },
        "generator": {
            "defaultConnection": "db1",
            "connections": ["db1","db2"]
        }
    }
}

Это сейчас отсюда, я не знаю, что делать. Как я могу указать в своем запросе, какую базу данных я хочу использовать?


<?php
require_once 'vendor/autoload.php';

require_once 'generated-conf/config.php';

use nhlonline\AuthorQuery;

$author = AuthorQuery::create()->find();

foreach($author as $pub){
   echo $pub->getFirstName() . '<br>';
}


?>

И даже если я попробую это сделать, у меня будет ошибка (файл класса My AuthorQuery правильно находится в папке):

Неустранимая ошибка: необработанная ошибка: класс 'Base \ AuthorQuery' не найден в C: \ xampp \ htdocs \ nhlonline \ nhlonline \ AuthorQuery.php: 15 Трассировка стека: # 0 C: \ xampp \ htdocs \ nhlonline\ vendor \ composer \ ClassLoader.php (444): include () # 1 C: \ xampp \ htdocs \ nhlonline \ vendor \ composer \ ClassLoader.php (322): Composer \ Autoload \ includeFile ('C: \ xampp \ htdocs)... ') # 2 [внутренняя функция]: Composer \ Autoload \ ClassLoader-> loadClass (' nhlonline \ Autho ... ') # 3 C: \ xampp \ htdocs \ nhlonline \ test.php (8): spl_autoload_call ('nhlonline \ Autho ...') # 4 {main}, брошенный в C: \ xampp \ htdocs \ nhlonline \ nhlonline \ AuthorQuery.php в строке 15

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...