====== Подключение к базе данных ======
Пакет DBAL предоставляет 2 основных способа получения объекта подключения к базе данных:
* Создание подключения вручную
* Создание подключения по-умолчания на основе конфигурационного файла **settings/db.conf.php**
===== Ручное подключение к базе данных =====
Существует компактный способ создания подключения - при помощи метода **lmbDBAL :: newConnection($dsn)**, где $dsn - это или объект класса lmbDbDSN или просто строка с параметрами подключения, например:
$connection = lmbDBAL :: newConnection('mysql://root:test@localhost/my_datatase?charset=utf8');
// или
$dsn = new lmbDbDSN('mysql://root:test@localhost/my_datatase?charset=utf8');
$connection = lmbDBAL :: newConnection($dsn);
Объект подключения к базе данных реализует интерфейс lmbDbConnection. Хотя этот интерфейс содержит методы **connect()** и **disconnect()**, в приложениях явно вызывать эти методы приходится очень редко - это происходит автоматически.
Полученный объект $connection можно каким-либо образом сохранить (например, в toolkit-е) и использовать в различных местах приложения:
На самом деле lmbDBAL делегирует создание connection-а тулкиту, поэтому тоже самое можно записать и другим способом:
$connection = lmbToolkit :: instance()->createDbConnection('mysql://root:test@localhost/my_datatase?charset=utf8');
===== Подключение по-умолчанию =====
По-умолчанию DBAL настроен таким образом, что подключение создается на основе содержимого файла **db.conf.php**, который находится в папке **settings** проекта. Содержимое db.conf.php описывает параметры соединения с базой данных в виде переменной $conf, которая является массивом с одним параметром - dsn, например:
'mysql://root:test@localhost/my_project?charset=utf8');
?>
Для получения соединения по-умолчанию с базой данных можно использовать метод lmbDBAL :: defaultConnection():
$conn = lmbDBAL :: defaultConnection();
Этот метод, на самом деле, делегирует выполнение тулкиту, а именно методу getDefaultDbConnection(). Поэтому пример, приведённый выше, можно написать иначе:
$conn = lmbToolkit :: instance()->getDefaultDbConnection();
Метод getDefaultDbConnection появляется в тулките благодаря подключенному в него классу **lmbDbTools**.
Вы можете установить свое собственное подключение по-умолчанию. Для этого можно воспользоваться методами lmbDbTools :: setDefaultDbDSN($conf) или setDefaultDbConnection($conn), например:
define('MY_DB_PARAMS', 'mysql://root:test@localhost/my_project?charset=utf8');
[...]
lmbToolkit :: instance()->setDefaultDbDSN(MY_DB_PARAMS);
[...]
$conn = lmbToolkit :: instance()->getDefaultDbConnection();
Подключение по-умолчанию используется везде в DBAL пакете (и в ACTIVE_RECORD к слову), если параметр подключения не указан явно, например:
lmbDBAL :: db($conn1)->select('news'); // Будет использован $conn1
lmbDBAL :: db()->select('news'); // Будет использовано подключение по-умолчанию.
===== Подключение к нескольким базам данных одновременно =====
При желании можно подключиться сразу к нескольким различным базам данных одновременно:
$conn1 = lmbDBAL :: newConnection('mysql://root:test@localhost/my_project?charset=utf8');
$conn2 = lmbDBAL :: newConnection('pgsql://root:test@localhost/my_other_project?persistent=true&charset=utf8');
Эти объекты разных подключений можно передавать в классы, использующие DBAL-пакет, чтобы они не использовали подключение по-умолчанию, например, в случае с lmbActiveRecord:
$news = lmbActiveRecord :: find('News', array(), $conn1);
$article = new Article(array(), $conn2);
[...]
$article->save();