ZDB

Бібліотека для доступу до БД
Бібліотека являє собою 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. У цьому випадку вибірка даних буде йти з уявлення, а запис у таблиці.
Метод init() використовується для ініціалізації полів.
Метод afterLoad() викликається після завантаження вмісту з відповідного рядка таблиці БД. У даному випадку перетворює дату в timestamp для універсальності подальшої роботи.
Обидва методи необов'язкові. Найважливіше - імена полів, яких йде звернення при роботі з екземпляром сутності повинні збігатися з іменами в таблиці БД. Усі інше буде автоматизовано бібліотекою ADODB. При збереженні даних бібліотека сама визначить типи полів Бд та сформує SQL запит із відповідними перетвореннями. Ніякого спеціального мапінгу полів чи генерації структур не потрібно.
Деякі приклади роботи з Entity:
    
      //загрузка коиистувача.
      $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");
    
      
    
Клас сущностей - звичайний клас и може бути розширений будь-якими необхідними методами. Наприклад перевірка користувача по логіну і паролю
!-- hit.ua -->