Примеры использования ORM RedBeanPHP

18.12.2021

В новом проекте поработал с ORM RedBeanPHP. Впечатления остались самые положительные, поэтому оставлю тут несколько заметок, по использованию. По сути, это будут примеры использования RedBeanPHP.

Сам проект на github: redbean, и ссылка на api.

Установка

Есть возможность скачать руками, но я использовал composer:

 
composer require gabordemooij/redbean:dev-master

После этого подключаем autoload и добавляем R, как короткую ссылку для удобства:

 
require_once(__DIR__.'/vendor/autoload.php');

use \RedBeanPHP\R as R;

Настройка

 
R::setup( 'mysql:host=localhost;dbname=DB_NAME','DB_USER', 'DB_PASSWORD', false);

// Проверка подключения к БД
if(!R::testConnection()) die('No DB connection!');

Добавляем в таблицу новую запись

 
$oTest1 = R::dispense('test1');
$oTest1->title = 'ИМЯ';
$oTest1->text = Текст';
$oTest1->published = 1;
$id = R::store( $oTest1 );
echo $id . '<br />';

test1 (dispense('test1');) - это имя таблицы в БД.

Загружаем

 
$oTest2 = R::load('test1', 6);
echo '<pre>';
    print_r($oTest2);
echo '</pre>';

Обновляем

 
$oTest2 = R::load('test1', 6);
$oTest2->title = '--!--';
$id = R::store( $oTest2 );
echo $id . '<br />';

Выборка

Допустим, нужно выбрать опубликованные записи с id 1,3 и 5:

 
// Поиск
$ids = [1, 3, 5];
//echo R::genSlots($ids). '<br />';
$aRows = R::find('test1', 'id IN (' . R::genSlots($ids) . ') AND published = 1', $ids);
echo '<pre>';
    print_r($aRows);
echo '</pre>';
foreach($aRows as $oRow)
{
  echo $oRow->title . '<br />';
}
echo '<hr />';

// Если одну из записей нужно еще и обновить:
$oRow = $aRows[5]; // Тут ID, а не порядковый номер!
$oRow->text = 'TfTfTf';
$id = R::store( $oRow );
echo $id . '<br />';

Выборка по полному запросу

 
$aRows = R::getAll("SELECT * FROM test1");
echo '<pre>';
    print_r($aRows);
echo '</pre>';

на выходе получим просто массив:

 
Array
(
    [0] => Array
        (
            [id] => 1
            [title] => qqqqqqq
            [text] => qqq qq qqq
            [published] => 1
        )

    [1] => Array
        (
            [id] => 2
            [title] => eeee
            [text] => rrr rrr rr
            [published] => 1
        )
...

Если же нужно получить объекты, то используем convertToBeans:

 
$aRows = R::convertToBeans('test1', $aRows);
echo '<pre>';
    print_r($aRows);
echo '</pre>';

на выходе:

 
Array
(
    [1] => RedBeanPHP\OODBBean Object
        (
            [properties:protected] => Array
                (
                    [id] => 1
                    [title] => qqqqqqq
                    [text] => qqq qq qqq
                    [published] => 1
                )
...

Выборка из нескольких таблиц

 
$aRows = R::findMulti('test1,test2', ' SELECT test1.*, test2.* FROM test1, test2 WHERE test2.id = test1.id'); 
echo '<pre>';
    print_r($aRows);
echo '</pre>';

Exec

Еще один интересный метод exec выполняет запрос и возвращает количество затронутых строк, хотя можно выполнить и SELECT :

 
$aRows = R::exec('SELECT * FROM test1 WHERE id = :id', [
  'id' => 1,
]);

echo '<pre>';
    print_r($aRows);
echo '</pre>';


Категории: PHP
Яндекс.Метрика