Многие из нас пришли в 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-ленту этого блога, чтобы не пропустить новые интересные статьи.

Tags: , ,

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

  1.  Дмитрий Says:

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