Пошук в базі даних з RedBeanPHP


Минулого разу ми розглядали виконання CRUD операцій з RedbeanPHP, було описано процес створення, читання, редагування та видалення бінів і відповідних їм записів у базі даних. Щоб «бути в курсі», перш за вcе рекомендую, прочитати попередні публікації присвячені цій ORM. Зараз же детальніше зупинимося на пошуку в базі даних.

Отож, RedbeanPHP дозволяє використовувати старий добрий SQL для пошуку бінів:
$contacts = R::find('contact', ' age = ?', array($age));
Метод find() повертає масив знайдених бінів і має 3 аргументи: тип шуканого біна, SQL-запит, та масив параметрів, що будуть підставлятись замість знаків питання у запиті. Зауважте, що індексами в асоціативтому масиві бінів будуть ключі відповідних записів у таблиці бази даних.

Крім того, метод find() підтримує такий формат запису:
$contacts = R::find(
    'contact', 
    'age = :age ORDER BY :sort_by', 
    array(':sort_by' => $sort_by, ':age' => $age)
);
Також існує метод findOne(), який повертає один бін:
$contact = R::findOne('contact', ' age = ? LIMIT 1', array($age));
Для пошуку всіх бінів:
$contacts = R::find('contact');
Для вибірки без умови, але з сортуванням чи лімітом:
$contacts = R::find('contact', ' 1 ORDER BY name LIMIT 5');
Тут SQL-запит починається з 1, бо не можна залишати блок умови порожнім, щоб відповідати синтаксису SQL. Звичайно люди, які розробляли RedbeanPHP, могли обійти цю маленьку незручність, але я вважаю, що дана реалізація обрана з міркувань швидкодії.

Також є зручний метод genSlots() для вибірки типу IN (…) :
$contacts = R::find(
    'contacts', 
    'age IN (' . R::genSlots($ages) . ') ',
    $ages
);
І, насамкінець, в декого може виникнути питання, що ж робити зі знайденими бінами. По-перше дані з біну можна отримувати, як описувалось раніше в статті «CRUD операції з допомогою RedbeanPHP»:
foreach ($contacts as $contact) {
    echo $contact->name . ': ' . $contact->phone . '<br/>;
}
Якщо ж нам потрібно не масив бінів, а простий асоціативний масив, то існують методи findAndExport() чи exportAll(). Взагалі, раджу «поритися» в коді, там є багато цікавого та корисного :)

Коментарі

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

Колір в CSS

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

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