Библиотека для доступа к БД
Библиотека представляет собой Active Record, построеный на функциональности библиотекаи ADODB.
Библиотека позволяет работать с бизнес-сущностями, не используя маппинг или иной способ
явного указания связи полей бизнес-сущности с полями таблицы БД.
Основной репозитарий на Гитхабе
Описание идеи в статье на Хабре
Документация по классам библиотеки
ZDB\DB
Класс, реализующий коннект к БД. Синглетон-обертка для ADODB.
Для инициализации необходимо передать параметры соединения.
\ZCL\DB\DB::config($host, $dbname,$dbuser,$dbpass,[$driver=mysqli]);
Получение коннекта (для нативных запросов)
DB::getConnect();
ZDB\Entity
Основной класс библиотеки, являющийся базовым для всех Entity.
К примеру, есть таблица пользователей
CREATE TABLE `users` (
`username` varchar(255) ,
`updated` date ,
`user_id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`user_id`)
)
Создадим класс сущности Пользователь на основе класса ZDB\Entity
/**
* @table=users
* @keyfield=user_id
*/
class User extends Entity{
protected function init() {
$this->user_id = 0;
$this->updated = time();
}
protected function afterLoad() {
$this->updated = strtotime($this->updated);
}
}
Если у нас есть представление для выборки пользователей, например usersview,
тогда мы указываем в псевдоаннотациях @view=usersview
.
В этом случае выборка данных будет идти из представления, а запись в таблцу.
//загрузка пользователя.
$user = User::load($id);
//записать пользователя с новыми значениями.
$user->username='newname';
$user->updated = time();
$user->save();
//новый пользователь
//если $user->user_id равен 0 создается новая запись и полю $user->user_id
//присваивается значение из автоинкрементного поля.
$user = new User();
$user->username='newname';
$user->save();
//удаление пользователя
User::delete($id);
//найти всех пользователей кроме админа
$users = User::find("username <> 'admin'");
//найти количество пользователей
$users = User::findCnt();
//вернуть имена пользователей в виде массива ключ/значение
// например для комбобокса
$users = User::findArray("username","","username asc");
Класс сущности - обычный класс и может быть расширен
любыми необходимыми методами. Например: проверка юзера по логину и паролю.