ORM Kohana examples
Дата: 27-02-2012Небольшой конспект по ORM.
ORM (англ. Object-relational mapping, рус. Объектно-реляционное отображение) — технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных». http://ru.wikipedia.org/wiki/ORM
Основное достоинство ORM:
ORM избавляет программиста от написания большого количества кода, часто однообразного и подверженного ошибкам, тем самым значительно повышая скорость разработки. Кроме того, большинство современных реализаций ORM позволяют программисту при необходимости самому жёстко задать код SQL-запросов, который будет использоваться при тех или иных действиях (сохранение в базу данных, загрузка, поиск и т. д.) с постоянным объектом.
Использование ORM:
1. Раскомментить в bootstrap.php:
Kohana::modules(array( 'auth' => MODPATH.'auth', // Basic authentication // 'cache' => MODPATH.'cache', // Caching with multiple backends // 'codebench' => MODPATH.'codebench', // Benchmarking tool 'database' => MODPATH.'database', // Database access // 'image' => MODPATH.'image', // Image manipulation 'orm' => MODPATH.'orm', // Object Relationship Mapping // 'unittest' => MODPATH.'unittest', // Unit testing // 'userguide' => MODPATH.'userguide', // User guide and API documentation ));
2. Правила!
Например в БД есть таблица 'peoples' - таблица должна быть названа во множественном числе.
А модель должна быть в единственном, т.е. /clasess/model/people.php
Внутри код подобный этому:
defined('SYSPATH') or die('No direct script access.');
class Model_People extends ORM {
protected $_table_name = 'peoples';
protected $_primary_key = 'people_id';
}Если указывать имя таблицы явно
protected $_table_name = 'peoples';
То имя таблицы необязательно должно совпадать с именем модели.
Таблица должна обязательно иметь primary_key - id, если он отличается от id - то нужно указать его явно protected $_primary_key = 'people_id';
3. Работа с данными в ORM
Допустим у нас есть в таблице поля: `peоple_id`, `name`, `age`.
Добавление данных:
$people = ORM::factory('people');
$people->name = 'Batman';
$people->age = '32';
$people->save(); // Сохранение записиУдаление данных:
Например, необходимо удалить данные с people_id = 3
$d = ORM::factory('people', 3);
if ($d->loaded()) // Проверка на существование записи в таблице с id равным 3
{
$d->delete(); // Удаление записи
}
Update данных:
$people = ORM::factory('people', $id); // где $id - id записи, которую мы хотим редактировать
$people->name = 'Batman';
$people->age = '35';
$people->save(); // Сохранение записи
/* Равнозначно запросу:
UPDATE `people`
SET `name`='Batman', `age`=35
WHERE `people_id`=$id
*/ Работа со связанными данными:
Связи:
Один-к-одному (has_one)
Один-ко-многим (has_many)
Принадлежность (belongs_to)
Многие-ко-многим (has_many "through")
Для того, чтобы указать связи связи в модели нужно указать их. Пример:
Class Model_Name extends ORM {
protected $_belongs_to /* указываем тип связи */ = array(
'[alias name]' => array(
'model' => '[model_name]',
'foreign_key' => '[column_name]',
)
);
}
