Инструменты пользователя

Инструменты сайта


limb3:ru:packages:active_record:intro

Краткое описание пакета ACTIVE_RECORD

Пакет ACTIVE_RECORD представляет средства для удобного отображения доменной логики в реляционную модель базы данных(ORM - Object to Relational Mapping). Пакет реализует паттерн ActiveRecord и значительно расширяет его, добавляя функционал, встречаемый в более сложных ORM решениях, например, средства по управлению связями, коллециями, value objects и проч. За реализацию паттерна в пакете отвечает класс lmbActiveRecord.

Первоначальная идея пакета ACTIVE_RECORD взята из фреймворка Ruby-On-Rails. Rails в данном случае выступали в качестве функционального ориентира, но мы не копировали полностью его API и функционал, а реализовывали только то, что было необходимо в текущий момент.

При реализации паттерна ActiveRecord, как правило, объекты хранятся в одной таблице базы данных. По-сути, lmbActiveRecord - это посредник между клиентским кодом и одной записью в одной таблице базы данных. В простейших случах, lmbActiveRecord позволяет полностью избавить разработчика от работы с SQL-кодом.

Основные характеристики пакета ACTIVE_RECORD:

  • Автоматическое определение наименований и типов полей таблицы, с которой работает lmbActiveRecord.
  • Поддержка отношений один-к-одному, один-ко-многим и много-ко-многим.
  • Поддержка ValueObjects
  • Поддержка наследования в рамках одной таблицы (Single Table Inheritance).
  • Поддержка «отложенной загрузки» (LazyLoading) для коллекций.
  • Тесная интеграция с шаблонными системами WACT и MACRO.

Пакет ACTIVE_RECORD отлично подходит для быстрой разработки приложений, особенно административной части. В случае, если необходима лучшая скорость, пакет легко представляет возможность ручного формирования SQL-запросов.

Пример работы с классом lmbActiveRecord

Основной класс пакета ACTIVE_RECORD - это класс lmbActiveRecord.

Рассмотрим небольшой пример работы с этим классом.

Предложим, что у нас есть таблица user в базе данных, созданная при помощи такого SQL-кода:

CREATE TABLE `user` (                         
 `id` BIGINT(20) NOT NULL AUTO_INCREMENT,         
 `name` VARCHAR(255) DEFAULT NULL,          
 `last_name` VARCHAR(255) DEFAULT NULL,         
  PRIMARY KEY  (`id`)                              
) ENGINE=InnoDB DEFAULT CHARSET=utf8;  

Тогда работать с ней при помощи пакета ACTIVE_RECORD можно так:

<?php
//если требуется, добавьте путь до директории с Limb3 пакетами
//set_include_path('/path/to/dir/with/limb'. PATH_SEPARATOR . get_include_path());
require_once('limb/active_record/common.inc.php');
 
lmbActiveRecord :: setDefaultDSN(array('driver' => 'mysql',
                                      'host' => 'localhost',
                                      'database' => 'ar_tests',
                                      'user' => 'root',
                                      'password' => 'secret'));
 
class User extends lmbActiveRecord{}
 
$user = new User();
$user->setName('Vasa');
$user->setLastName('Pupkin');
$user->save();
 
$user_loaded = new User($user->getId());
echo $user_loaded->getName() . ' ' . $user_loaded->getLastName(); // Выведет Vasa Pupkin
 
//альтернативный способ загрузки
$user_loaded = lmbActiveRecord :: findById('User', $user->getId());
?>

Для работы этого скрипта убедитесь, что в include_path содержится путь до вашей инсталляции Limb, а также, что база данных 'ar_test' содержит таблицу user.

Класс lmbActiveRecord является дочерним классом от lmbObject, поэтому он автоматически поддерживает методы вида setName($value) или getLastName(). Можно также использовать обычные set/get методы, например, set('name', $value);

Метод save() - создает новую или сохраняет существующую запись в таблице базы данных. В нашем случае это будет таблица user. Каждый объект lmbActiveRecord после сохранения имеет свой уникальный идентификатор, который можно получить при помощи метода getId().

Если в конструктор lmbActiveRecord передается int значение, то по-умолчанию, lmbActiveRecord пытается загрузить объект, первичным ключом которого является переданное значение.

Альтернативно, объекты можно загружать из БД по первичному ключу при помощи метода findById($id).

Это был самый простейший пример работы с классом lmbActiveRecord, теперь рассмотрим принципы работы с ним по-подробнее.

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
   _  __   __ __   _  __   ____   ___ 
  / |/ /  / //_/  | |/_/  / __/  / _ )
 /    /  / ,<    _>  <   _\ \   / _  |
/_/|_/  /_/|_|  /_/|_|  /___/  /____/
 
limb3/ru/packages/active_record/intro.txt · Последние изменения: 2010/11/10 10:02 (внешнее изменение)