Множественные подключения¶
Idiorm теперь работает со множественными подключениями. Большинство статических функций работают с опциональным именем соединения в качестве дополнительного параметра. Касательно метода ORM::configure
, это означает, что при передаче строки соединения для установки нового соединения, второй параметр, который обычно опускается, должен быть равен null
. Во всех случаях, если имя соединения не предоставлено, то оно примет значение по-умолчанию ORM::DEFAULT_CONNECTION
.
При составлении цепочки, как только метод for_table()
был использован, оставшиеся вызовы в цепочке будут использовать корректное соединение.
<?php
// Соединение по-умолчанию
ORM::configure('sqlite:./example.db');
// Именованное соединение, где 'remote' произвольное имя ключа
ORM::configure('mysql:host=localhost;dbname=my_database', null, 'remote');
ORM::configure('username', 'database_user', 'remote');
ORM::configure('password', 'top_secret', 'remote');
// Используя соединение по-умолчанию
$person = ORM::for_table('person')->find_one(5);
// Используя соединение по-умолчанию явным образом
$person = ORM::for_table('person', ORM::DEFAULT_CONNECTION)->find_one(5);
// Используя именованное соединение
$person = ORM::for_table('different_person', 'remote')->find_one(5);
Поддерживаемые методы¶
В каждом из этих случаев, параметр $connection_name
необязательный, и является произвольным ключем, идентифицирующим название соединения.
ORM::configure($key, $value, $connection_name)
ORM::for_table($table_name, $connection_name)
ORM::set_db($pdo, $connection_name)
ORM::get_db($connection_name)
ORM::raw_execute($query, $parameters, $connection_name)
ORM::get_last_query($connection_name)
ORM::get_query_log($connection_name)
Среди этих методов, только ORM::get_last_query($connection_name)
не использует соединение по-умолчанию, если не передано название подключения.
Вместо этого, если не передавать название подключения (или значение null
) то метод вернет самый последний запрос любого соединения.
<?php
// Используя соединение по-умолчанию явным образом
$person = ORM::for_table('person')->find_one(5);
// Используя именованное подключение
$person = ORM::for_table('different_person', 'remote')->find_one(5);
// Последний запрос *любого* соединения
ORM::get_last_query(); // вернет запрос в 'different_person' используя имя 'remote'
// Вернет запрос 'person' используя переданную строку соединения из настроек по-умолчанию
ORM::get_last_query(ORM::DEFAULT_CONNECTION);
Примечания¶
- Нет поддержки объединений (join) по подключениям
- Множественные подключения не делятся настройками конфигурации. Это означает, что если у одного соединения параметр логов имеет значение
true
а у другого нет, то только запросы из соединения со включенным логом будут доступны для методовORM::get_last_query()
иORM::get_query_log()
. - Был добавлен новый метод,
ORM::get_connection_names()
, возвращающий массив с именами соединений. - Кэширование должно работать со множеством соединений (не забудьте включить кеширование для каждого соединения), однако это не надежно в отношении unit-тестирования. Пожалуйста, сообщайте об ошибках.