Фронт-контроллеры пока отложил, затянуло что-то в отдельные пакеты. Сделал пакет для работы с базами данных, надстройка над PDO, пока что только для работы с mysqli, но думаю расширить проблем не составит.
Сделал различные варианты, где-то пока что с ограниченным функционалом. Например, связи между таблицами пока что не реализованы. Название классов связанно с расположением.
Вообщем вот что есть:
Создание соединения с БД$connect = new Db_Connect_Mysqli( $config );
// выполнение запроса
$connect -> execute( "INSERT INTO" );
// выполнение запроса выборки
$connect -> fetchAll( "SELECT * FROM table" );
Использование DBAL (абстрактный слой доступа)Простой фасад для выполнения запросов
$dbal :: query( $sql );
$dbal :: select( $table, $query_params );
$dbal :: insert( $table, $data );
$dbal :: update( $table, $data, $where );
$dbal :: delete( $table, $where );
Составные запросы
// чтение
$query = new Db_Query_Select( $connect );
$query -> select() -> from( 'table' ) -> where( $where ) -> limit( 2 ) -> query();
$query = new Db_Query_Select( $connect, array( 'from' => 'table', 'where' => 'where' ) );
$query -> query();
// запись
$query = new Db_Query_Insert( $connect );
$query -> insert( $table ) -> import( $data ) -> execute();
// изменение
$query = new Db_Query_Update( $connect );
$query -> update( $table ) -> import( $data ) -> where( $where ) -> execute();
// удаление
$query = new Db_Query_Delete( $connect );
$query -> delete( $table ) -> where( $where ) -> execute();
Цепочку можно заменить:
// чтение
$query = new Db_Query_Select( $connect, array( 'from' => 'table', 'where' => $where ) );
// запись
$query = new Db_Query_Insert( $connect, $table, $data );
// и т.д.
Использование ORM (объектная модель), работа с таблицей
// установка соединения по умолчанию для всех таблиц
Db_Table :: setConnect( $connect );
$table = new Db_Table( 'page' );
// возвращает список строк
$table -> find( $where, $query_params );
// возвращает одну строку
$table -> findById( 2 );
// другие операции
$table -> insert( $data );
$table -> update( $data, $where );
$table -> delete( $where );
Active Record
// добавление строки
$page = new Page();
$page -> name = 'Новое имя';
$page -> save();
// чтение и изменение строк
$pages = AR :: find( $query_params );
$pages -> name = 'Новое имя';
$pages -> save();
// удаление строк
$pages = AR :: find( $query_params );
$pages -> delete();
Все запросы выборки возвращают итератор объектов, которые можно считывать, например, так:
while( $row = $reader -> read() )
echo $row -> getName() . '<br/>';
Интересно, кто какие способы доступа к БД обычно использует и есть ли какие замечания по данному API ?
_____________
если помог, не скупись на карму =)