В новом проекте поработал с ORM RedBeanPHP. Впечатления остались самые положительные, поэтому оставлю тут несколько заметок, по использованию. По сути, это будут примеры использования RedBeanPHP.
Примеры использования ORM RedBeanPHP
18.12.2021
Сам проект на 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>';