====== Пакет DBAL ====== Пакет DBAL(**D**ata **B**ase **A**bstraction **L**ayer) предоставляет объектно-ориентированный доступ к базе данных, абстрагируясь от деталей конкретной реализации базы данных. В данный момент пакет DBAL поддерживает следующие базы данных: [[http://mysql.com/|MySQL]] 4.1+, [[http://sqlite.org/|SQLite]], [[http://www.oracle.com/|Oracle]] (OCI8), [[http://www.postgresql.org/|PostgreSQL]] 8.2+, [[http://www.linter.ru/|Linter]] Некоторые задают нам вопрос по поводу того, почему мы не используем PHP-расширение PDO? * Во-первых, PDO не предоставляет средств для получения meta-информации о структуре базы данных, а эта возможность активно у нас используется в пакете ACTIVE_RECORD. * Ну, а во-вторых, текущее состояние PDO драйвера оставляет желать лучшего: не поддерживаются многие драйвера, нативные драйвера зачастую работают быстрее и предоставляют большие возможности по контролю работы с БД. ===== Использование пакета DBAL ===== * [[.dbal:intro|Введение в пакет DBAL]] * [[.dbal:connection|Подключение к базе данных]] * [[.dbal:intro_to_query_and_criteria|Использование классов из подсистем Query и Criteria]] * [[.dbal:transactions|Поддержка транзакций]] * [[.dbal:dump_load|Загрузка sql-дампа базы данных]] ===== Архитектура пакета DBAL ===== Пакет DBAL зависит от следующих пакетов: CORE, TOOLKIT, CONFIG. Пакет DBAL состоит из нескольких групп классов или подсистем: ^Группа классов^Назначение^ |[[.dbal:Driver|Driver]]|Драйвер (Driver) - базовые классы для работы с базами данных, которые абстрагируют доступ к базе данных. При помощи них осуществляются операции выборки и изменения состояния базы данных (select, update, insert, delete и т.д.).| |[[.dbal:Query|Query]]|Группа классов, позволяющих тем или иным образом инкапсулировать SQL запросы.| |[[.dbal:Criteria|Criteria]]|Группа классов, позволяющих строить условия для инкапсулированных SQL запросов.| |**Dump**|Группа классов, используемых для загрузки sql-дампов. см. [[.dbal:dump_load|Загрузка sql-дампов]].| Также есть набор дополнительных классов: ^Группа классов^Назначение^ |[[.dbal:lmbDBAL|lmbDBAL]]|Фасад для DBAL-пакета.| |[[.dbal:lmb_table_gateway|lmbTableGateway]]|Класс, упрощающий работу с отдельными таблицами базы данных.| |[[.dbal:lmb_simple_db|lmbSimpleDb]]|Небольшой фасад для пакета. Позволяет выполнять простейшие CRUD запросы. Используется в основном с тестах| |[[.dbal:lmb_db_tools|lmbDbTools]]|Tools для работы с базой данных. Автоматически добавляется в lmbToolkit при включении файла limb/dbal/common.inc.php| |**lmbDbDump**|Небольшой фасад для Dump-подсистемы пакета. Позволяет загружать sql-дамп и очищать таблицы, затронутые этим дампом. см. [[.dbal:dump_load|Загрузка sql-дампов]].| |**lmbAutoTransactionFilter**|Фильтр, который вставляется в общую цепочку фильтров приложения, и который автоматически стартует транзакцию базы данных при первом запроса на изменение состояния базы данных. см. [[.dbal:transactions|Поддержка транзакций]].| |**lmbDbException**|Класс исключения, которые могут быть сгенерированы классами пакета DBAL.|