Active Record реализует популярный способ доступа к данным в реляционных базах данных через технологию объектно-реляционного отражения (ORM). Согласно основной концепции AR, для каждой таблицы в БД создается отдельный класс. Каждая запись в этой таблице представлена как экземпляр (объект данного класса). А общие операции CRUD реализованы как методы AR. В результате при минимальном количестве кода можно реализовать самые стандартные операции с таблицей: добавление, чтение, обновление, удаление.
Например, следующий код добавляет запись в таблицу sys_objects:
$obj = $parser->utils->ar('sys_objects'); //Создаём экземпляр класса $obj->fields->objid->newval = 'new_page_id'; // Задаём значения полей $obj->fields->name->newval = 'New page'; $obj->create(); // Добавляем запись
Здесь видно, что при работе с AR подключаться к БД не нужно – объект соединения создается в момент создания объекта AR.
В PHP-платформе Wad-er паттерн Active Record реализован двумя способами:
ADOdb Active Record позволяет выполнять кеширование транзакций на уровне БД, устанавливать связи между AR-классами и получать наборы связанных данных (реляционные запросы), следить за производительностью реляционных запросов и многое другое.
Класс wPrototype является надстройкой над ADOdb и позволяет применить к таблице основные операции CRUD. У класса есть более удобная обертка - метод ar($objtype) класса utils (main/classes/utils.class.php), которая работает аналогично wPrototype.
WAR позволяет представить в виде объекта со своими свойствами и методами (включая методы визуализации объектов) не только каждую запись в таблице БД (Active Record), но и каждое поле в этой записи (Active Field) со своими свойствами (главным свойством является val – значение поля), но без методов. Предусмотрено хранение старых и новых значений полей (свойство newval, например, для логирования изменений).
Кроме 4-х классических методов CRUD (Create, Read, Update, Delete), WAR предоставляет для каждого объекта дополнительные возможности:
Применение WAR позволяет эффективно обновлять базовый функционал системы - при модификации кода класса wPrototype его дочерние классы автоматически унаследуют все новые свойства и методы.