My favorites | Sign in
Project Home Downloads Wiki Issues Source
Search
for

RuLib » Ядро системы

  • MVC (Days_Model, Days_View, Days_Controller - Модель, Представление, Контроллер) - базовые понятия необходимые для работы с фреймворком
  • Days_Config - работа с конфигурацией сайта
  • Days_Db - работа с базой данных
  • Days_Db_Table - реализация ORM представления таблиц базы данных
  • Days_Engine - стартовая точка входа
  • Days_Event - реализация шаблона проектирования наблюдатель (observer)
  • Days_Log - протоколирование ошибок и отладочной информации
  • Days_Request - запрос от браузера пользователя
  • Days_Response - ответ браузеру пользователя
  • Days_Url - работа с адресной строкой

В стадии разработки

  • Days_Acl (Aceess Control List - список прав доступа) - разграничение прав доступа к разделам сайта
  • Days_Filter - фильтрация данных, приходящих от пользователя (так же известен как валидация или проверка данных)
  • Days_Form - обработка данных, приходящих из html форм
  • Days_User - работа с пользователем (авторизация, аутентификация, завершение сессии)
RuLibDaysDbTable  
ORM для работы с таблицами.
Lang-Ru
Updated Oct 29, 2009 by anton.danilchenko

Общие сведения

ORM - позволяет работать с базой данных так, как будто Вы работаете с объектами языка php. Вам не приходится писать SQL запросов для получения или сохранения данных. Вместо этого нужно вызывать методы для получения данных.

Применение ORM поможет Вам ускорить процесс разработки приложения и упростит процесс дальнейшего изменения приложения.

Как работает ORM

Создаем класс для нужной нам таблицы blog_category (хранит категории постов). Для этого мы создаем файл "/var/www/myblog/app/Model/Table/Blog/Category.php" с определением класса:

<?php
class Myblog_Model_Table_Blog_Category extends Days_Db_Table {
    protected $_name = 'blog_category';
}

Получаем объект нужной нам таблицы. Это делается так:

$tableBlogCategory = Days_Model::factory('table_blog_category');

Получаем данные из таблицы:

// получаем информацию об одной категории
$category = $tableBlogCategory->find('one', array('where'=>array('id'=>10)));
// получаем все категории
$categories = $tableBlogCategory->find('all');
// получаем 20 подкатегорий
$subcategories = $tableBlogCategory->find('all', array(
  // возвратить подкатегории для категории с id=10
  'where' => array(
    'pid' = 10
  ),
  // возвращает первые 20 строк
  'count' => 20
));
// получаем количество подкатегорий
$countCategories = $tableBlogCategory->find('count', array(
  // возвратить подкатегории для категории с id=10
  'where' => array(
    'pid' = 10
  )
));
// получаем первые 15 категорий
$firstCaterories = $tableBlogCategory->find('first', array(
  'count' => 15
));
// удаляем категорию
$category->delete();
// удаляем все категории, входящие в набор
$firstCaterories->delete();
// создаем новую строку
$newRow = $subcategories->create();
$newRow->name = 'New subcategory';
// сохраняем запись
$newRow->save();

Работа с Days_Db_Table

Первым делом - опишите структуру всех таблиц базы данных в файле /var/www/myblog/app/config/database.yaml. У Вас получится что-то похожее на:

# site database structure
catalog:
  columns:
    _catalog_id: {type: int, attr: unsigned}
    _catalog_category_id: {type: int, attr: unsigned}
    url_name: {type: varchar, len: 100}
    date_create: {type: date}
    date_change: {type: date}
    name: {type: varchar, len: 50}
    title: {type: varchar, len: 255}
    description: {type: text}
    cost: {type: float, attr: unsigned}
catalog_property:
  columns:
    _catalog_property_id: {type: int, attr: unsigned}
    _catalog_id: {type: int, attr: unsigned}
    sex: {type: enum, attr: "m,w"}
    material: {type: varchar, len: 70}
    color: {type: varchar, len: 70}
catalog_category:
  columns:
    _catalog_category_id: {type: int, attr: unsigned}
    _catalog_category_pid: {type: int, attr: unsigned}
    url_name: {type: varchar, len: 100}
    name: {type: varchar, len: 50}
    title: {type: varchar, len: 255}
    description: {type: text}
catalog_image:
  columns:
    _catalog_image_id: {type: int, attr: unsigned}
    _catalog_id: {type: int, attr: unsigned}
    src: {type: varchar, len: 100}
    name: {type: varchar, len: 100}
    title: {type: varchar, len: 255}

Days_Db_Table является представлением реальной таблицы, и позволяет выполнять операции над этой таблицей.

  • find($type, $cond) - получить результат в указанном виде
    • $type - в каком виде возвратить результат
      • all: все строки
      • first: все строки с сортировкой по дате (свежие записи будут первыми)
      • last: все строки с сортировкой по дате (свежие записи будут последними)
      • one: одна строка
      • count: общее количество строк (сами строки не возвращаются)
    • $cond - условия, налагаемые на результат
      • count (int): количество строк в результате выборки
      • page (int): текущий номер страницы (start from 1)
      • columns -(array): имена колонок
      • where (array): пары column=>$value или column_with_value
      • group (array): группировка по колонкам
      • order (array): сортировка по колонкам
  • create() - создает новый пустой Rowset
  • save(Days_Db_Row $row) - сохраняет данные указанного ряда
  • delete(Days_Db_Row $row) - удаляет данные указанного ряда
  • join($table) - присоединить указанную таблицы к результату

Работа с Days_Db_Rowset

Представляет набор строк Days_Db_Row. Позволяет изменять набор строк.

  • create(array $data=array()) - создать новую строку Days_Db_Row
  • save(Days_Db_Row $row) - сохранить указанную строку
  • delete(Days_Db_Row $row) - удалить указанную строку
  • count() - количество строк в данном наборе
  • toArray() - возвращает набор строк в виде массива

Так же позволяет получать данные из текущего ряда, как-будто бы мы работаем с этим рядом.

// выводит имя первой категории
echo $categories->name;

Работа с Days_Db_Row

Представляет строку таблицы и позволяет работать с ней.

  • save() - сохраняет текущую строку
  • delete() - удаляет текущую строку
  • toArray() - возвращает текущую строку в виде массива
  • parent - получение всех родительских элементов (если есть столбец id и pid)
  • child - получение всех дочерних элементов (если есть столбец id и pid)
  • имя_таблицы - получение связанных записей из указанной таблицы (для получения категорий из таблицы blog_category для объекта таблицы blog нужно указать просто category вместо blog_category)

Sign in to add a comment
Powered by Google Project Hosting