Многие из нас пришли в web после знакомства с массой других технологий программирования. И конечно же знакомы с ORM. Если же вы впервые видите эту абривиатуру, то это еще не значит, что вы не сталкивались с таким подходом. Он втречается очень часто и, возможно, вы просто не знали как это называется.
ORM
— технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных».
Другими словами каждая таблица в коде представляется как одноименный класс, а каждое поле таблицы как свойство класса.
Web конечно же не остался в стороне. И здесь мы имеем средства для использования этого подхода. Одно из таких стредств - Kohana ORM. О нем и пойдет речь в этой заметке.


Легче всего объяснять как с этим работать на сущностях с которыми знакомы все мы. Всем известно какие сущности есть для web-приложения “блог”.
Это сущности: (набор полей в скобках задан как пример и служит лучшему пониманию примеров кода статьи)

  • Пользователи ( Таблица users с полями id и name)
  • Сообщения блога (Таблица blog_post c полями id, title, text, user_id)
  • Комментарии к сообщениям (Таблица comments с полями id, text, post_id)

Для того чтобы использовать ORM вы должны сначала создать модель как наследницу класса ORM. Каждая модель представляет таблицу базы даных. ORM понимает связи между таблицами. Это облегчает наш с вами труд при разработке.

class User_Model extends ORM {}

Для определения связей между таблицами служат специальные свойства

class Blog_Post_Model extends ORM {
 
    protected $has_one = array('user');
    protected $has_many = array('comments');
 
}

Свойстава могут быть следующие

  • has_one - связь один-к-одному
  • has_many - родительская сторона связи один-ко-многим
  • belongs_to - дочерняя сторона связи один-ко-многим
  • has_and_belongs_to_many - связь многие ко многим

После такого объявления класса как в предыдущем примере мы можем сделать так

$post = ORM::factory('blog_post', 1); // 1 - значение первичного ключа
echo $post->user->username;
// и так
$comment = ORM::factory('comment', 1);
$post = $comment->blog_post;

Конечно же можно не только получать значения из таблиц, но и менять данные в таблицах. Для этого есть, например, метод save().

1
2
3
$post = ORM::factory('blog_post', 1);
$post->title = 'New title';
$post->save();

Если в строке 3 предыдущего примера вызвать $post->reload(), то title сбросится к сохраненному в БД значению.
С применением ORM можно делать различного вида выбоки. Например:

// Найти статью с первичным ключом равным 1
$object = ORM::factory('blog_post')->find(1);
echo $object->title;
// Найти статью по заголовку
$object = ORM::factory('blog_post')->where('title', $title)->find();

Делать выборку многих строк

$limit = 10;
$offset = 30;
// Ограничение на количество записей делать не обязательно
$posts = ORM::factory('blog_post')->find_all($limit,$offset); 
foreach($posts as $post) {
    echo $post->title;
}

Вот что такое Kohana ORM. Конечно же данная статья носит лишь ознакомительных характер. Наиболее полную информацию по всем методам класса ORM можно найти на cтранице с документацией по Kohana ORM. Читайте ее для более глубокого понимания. Подписывайтесь на RSS-ленту этого блога, чтобы не пропустить новые интересные статьи.

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong Rambler Закладки
Tags: , ,

One Response to “Продолжаем работать с БД. ORM в Kohana”

  1.  Дмитрий Says:

    Спасибо большое.
    Можете выложить дамп примера для скачивания?

Leave a Reply

Для вставки кода используйте кнопку Код, по умолчанию используется синтаксис подсветки языка php, вы можете поменять его на любой другой поддерживаемый.