Приклади побудови запитів з RedBeanPHP
Хто слідкує за моїм блогом, той вже в курсі про RedbeanPHP і читав про переваги та основи роботи з цією ORM. Цього разу я опишу додаткові можливості RedbeanPHP, які в деяких випадках можуть значно спростити життя програміста.
Звичайні запити
Якщо вам потрібно виконати звичайний запит напряму, то це можна дуже просто зробити:R::exec('UPDATE contact SET age=23 WHERE id=2');Тут, і у поданих нижче прикладах, дані можна “біндити” наступним чином:
R::exec( 'UPDATE contact SET age=23 WHERE name LIKE ?', array('%Тарас%') );або так:
R::exec( 'UPDATE contact SET phone=:phone WHERE id=:id', array(':phone' => '234-56-78', ':id' => 2) );Метод exec() дозволяє фактично напряму в СУБД писати будь-які запити, екранує дані, і в рeзультаті повертає кількість оновлених (видалених, вибраних) рядків.
Також, якщо у якомусь випадку потрібно просто витягнути дані у масив без прив’язки до об’єктів, чи просто буває зручніше написати прямий запит, то це можна зробити наступним чином:
1) вибірка кількох рядків у багатовимірний масив (масив записів, які в свою чергу теж є масивами):
R::getAll('SELECT * FROM contact WHERE age > 20'); array[ 0 => array[ /* рядок в БД */ ] 1 => array[ /* рядок в БД */ ] ... ]2) вибірка одного рядка у масив:
R::getRow('SELECT * FROM contact WHERE phone="234-56-78" LIMIT 1'); array[ 'id' => 2 'name' => 'Тарас Романів' ... ]3) вибірка одного стовпця у масив:
R::getCol('SELECT DISTINCT age FROM contact'); array[ 0 => 20 1 => 22 ... ]4) вибірка однієї клітинки у звичайну змінну:
R::getCell('SELECT age FROM contact WHERE id=2 LIMIT 1'); 'int' 235) вибірка двох заданих стовпців у асоціативний масив (зручно формувати дані для <select>…</select>, тощо):
R::getAssoc('SELECT phone, name FROM contact WHERE age>22'); array[ '234-56-78' => 'Тарас Романів' '345-67-89' => 'Ларі Пейдж' ... ];
Суміш PHP та SQL
В RedbeanPHP можна зручно поєднувати PHP та SQL код. Якщо нам потрібно виконати SQL-функцію, чи побудувати іншу конструкцію, то необов’язково вручну писати запит. Це можна зробити наступним чином:$time = R::$f->now(); // аналогічно до "SELECT NOW();"Крім таких простих конструкцій, можна будувати і значно складніші запити прямо в себе в коді. Де буває корисним для побудови динамічних запитів, тобто таких, що можуть змінювати свою структуру за певних умов. Отож:
$contact = R::$f->begin() ->select('*')->from('contact') ->where('id = ?')->put(2)->get('row'); // аналогічно до "SELECT * FROM contact WHERE id=2;"Звичайно, на перший погляд ця контрукція здається громіздкою, але з іншого боку вона є досить гнучкою, і надає цим самим додаткові можливості програмістові.
Транзакції
Ну і звичайно, в RedbeanPHP є підтримка транзакцій. Вони реалізовуться за допомогою методів begin(), commit(), rollback() наступим чином:R::begin(); try { R::store($contact); R::commit(); } catch(Exception $e) { R::rollback(); }Дякую за увагу! Сподіваюсь, матеріал був корисним для вас.
Коментарі
Дописати коментар