CRUD операції з допомогою RedbeanPHP


В попередній моїй статті «RedBeanPHP — проста і потужна ORM» ми розглядали ORM RedbeanPHP, а також її можливості та переваги. Тепер поговоримо про основи роботи з цією бібліотекою на прикладі CRUD операцій.

Для початку, піключимо та налаштуємо її для роботи з MySQL:
require('rb.php');
R::setup('mysql:host=localhost;dbname=testdb', 'user', 'pass');
Як я вже раніше згадував, ORM RedBeanPHP є досить простою у використанні. Вона працює з об’єктним представненням даних, так званими «бінами».  Не потрібно жодного початкового налаштування, можна просто почати працювати з порожньою базою даних і RedBeanPHP автоматично згенерує всі потрібні таблиці, стовпці, індекси та зовнішні ключі. Отже, почнемо зі створення біну. По суті це об’єкт з публічними параметрами та визначеним типом, що використовується для його прив’язки до відповідної таблиці в базі даних. Його створення виглядає наступним чином:
$contact = R::dispense('contact');
Отже, тепер ми маємо порожній бін з типом "contact". Заповнимо його даними:
$contact->name = 'Taras Romaniv';
$contact->phone = '099-111-22-33';
$contact->age = 22;
Зауважте, що RedbeanPHP в назвах типів бінів та їх параметрів підтримує лише малі літери латинського алфавіту. Тепер збережемо ці дані за допомогою методу store(), який після збереження даних повертає ID запису в таблиці:
$id = R::store($contact);
Ось і все! Дані об’єкту збережені в базі даних, де було згенеровано відповідну таблицю "contact". Наш бін має три задані параметри, тому в таблиці згерерувались три стовпці ("name", "phone" та "age"). У нашому випадку для текстових даних RedbeanPHP визначив тип VARCHAR(255), а для стопця "age" тип TINYINT. Якщо ж у майбутньому буде потрібно в стовпці з типом TINYINT зберігати великі числа, або ж числа з плаваючою крапкою, то тип цього стовпця автоматично зміниться на потрібний (INT, BIGINT, FLOAT, тощо).

Окрім цього, в RedbeanPHP 3.0 з’явилася підтримка спеціальних типів даних. Якщо в об’єкт передати дату в форматі "2011-12-22" чи "2011-12-22 17:40:25", то відповідному стовпцю при можливості застосується тип DATE чи DATETIME. Також є підтримка геометричних типів даних (POINT, POLYGON, тощо). Тому в процесі роботи рідко виникає потреба вручну вносити зміни в структурі таблиць.

По замовчуванню RedBeanPHP працює в гнучкому режимі, в якому структура бази даних в процесі розробки на льоту змінюється у відповідності до вимог вашого коду. Як на мене, це ідеальний варіант для розробки — ви можете просто працювати бінами і більше ні про що не турбуватись. Проте, на кінцевих етапах розробки часто буває необхідно переглянути схему бази даних і вручну внести корективи в потрібних місцях. Щоб, RedbeanPHP згодом не порушив ці корективи, ви можете «заморозити» RedBeanPHP за допомоою методу freeze(). Це заблокує схему бази даних для запобігання подальших модифікацій.
R::freeze(true);
Отож, тепер розберемося як "витягувати" збережені біни. Отримання біну з бази даних є дуже простим і виглядає наступним чином:
$contact = R::load('contact', $id);
Метод load() ініціалізовує бін із попередньо збережених даних. В цей метод потрібно передати тип біну, та його ID, що відповідає первинному ключеві запису в таблиці БД. Якщо ж не вдається знайти такий запис, то створиться порожній бін з нульовим ID. Це дає можливітсь реалізувати наступну перевірку:
if (!$contact->id) { echo 'Помилка! Контакт не знайдено.'; }
Для доступу до даних, достатньо звернутись до відповідних публічних параметрів біну:
echo $contact->name . ': ' . $contact->phone;
Також, замість завантаження одного біну, можна завантажувати одразу масив бінів:
$contacts = R::batch('contact', array($id1, $id2));
Якщо ми завантажили бін, то його параметрам також можна присвоювати інші значення, а також задавати йому інші параметри. Тому операція зміни даних виглядатиме наступним чином:
$contact = R::load('contact', $id);
$contact->phone = '099-555-66-77';
$contact->website = 'http://trsrm.org.ua';
$contact->address = 'Ukraine, Ivano-Frankivsk';
R::store($contact);
Для видаленя біну і відповідного запису в базі даних є метод trash():
R::trash($contact);
Як бачите, RedbeanPHP є дуже простою та гнучкою у використанні ORM. В наступній статті «Пошук в базі даних з RedbeanPHP» ми розглянемо складніші типи вибірки даних та ін.

Коментарі

Популярні дописи з цього блогу

Колір в CSS

Комунікація між вкладками браузера

Порівняння швидкодії PHP-фреймворків