An open API service indexing awesome lists of open source software.

https://github.com/bitrix-toolkit/bitrix-entity-mapper

Декларативный ORM для инфоблоков Bitrix.
https://github.com/bitrix-toolkit/bitrix-entity-mapper

bitrix orm php

Last synced: 4 months ago
JSON representation

Декларативный ORM для инфоблоков Bitrix.

Awesome Lists containing this project

README

          

# Bitrix Entity Mapper

[![PHPUnit](https://github.com/bitrix-toolkit/bitrix-entity-mapper/actions/workflows/php-unit.yml/badge.svg)](https://github.com/bitrix-toolkit/bitrix-entity-mapper/actions/workflows/php-unit.yml)
[![Coverage](https://scrutinizer-ci.com/g/bitrix-toolkit/bitrix-entity-mapper/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/bitrix-toolkit/bitrix-entity-mapper/?branch=master)
[![Scrutinizer](https://scrutinizer-ci.com/g/bitrix-toolkit/bitrix-entity-mapper/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/bitrix-toolkit/bitrix-entity-mapper/?branch=master)

Декларативный ORM для инфоблоков Bitrix.

## Установка

```bash
composer require bitrix-toolkit/bitrix-entity-mapper
```

## Быстрый старт

Описываем с помощью PHPDoc аннотаций способ хранения объектов в Bitrix:

```php
active = true;
$book->title = 'Остров сокровищ';
$book->author = 'Р. Л. Стивенсон';
$book->publishedAt = new DateTime('1883-06-14 00:00:00');

$bitrixId = EntityMapper::save($book);
```

Есть несколько способов перебрать результат:

```php
use BitrixToolkit\BitrixEntityMapper\EntityMapper;
use Entity\Book;

$query = EntityMapper::select(Book::class)->where('author', 'Р. Л. Стивенсон');

// Получить один результат.
$query->fetch();

// Перебрать по одному результату.
while ($book = $query->fetch()) { /* ... */ }

// Использовать реализованную имплементацию интерфейса Iterator.
foreach ($query as $book) { /* ... */ }

// Использовать метод возвращающий генератор.
foreach ($query->iterator() as $book) { /* ... */ }

// Получить массив со всеми результатами.
// Не рекомендуется! Небезопасное потребление памяти.
$query->fetchAll();
```

Получаем результат по фильтру сущности:

```php
use BitrixToolkit\BitrixEntityMapper\EntityMapper;
use Entity\Book;

/** @var Book|null $book */
$book = EntityMapper::select(Book::class)->where('title', 'Остров сокровищ')->fetch();

/** @var Book[] $books */
$books = EntityMapper::select(Book::class)->where('author', '%', 'Стивенсон')->fetchAll();

/** @var Book[] $books */
$books = EntityMapper::select(Book::class)->where('publishedAt', '<', '01.01.1900')->fetchAll();
```

Получаем результат по фильтру Bitrix:

```php
use BitrixToolkit\BitrixEntityMapper\EntityMapper;
use Entity\Book;

/** @var Book|null $book */
$book = EntityMapper::select(Book::class)->whereRaw('ID', 1)->fetch();

/** @var Book[] $books */
$books = EntityMapper::select(Book::class)->whereRaw('ACTIVE', 'Y')->fetchAll();
```

Сортируем выборку:

```php
use BitrixToolkit\BitrixEntityMapper\EntityMapper;
use Entity\Book;

/** @var Book|null $book */
$book = EntityMapper::select(Book::class)->orderBy('publishedAt', 'desc')->fetch();
```

Обновляем существующий объект:

```php
use BitrixToolkit\BitrixEntityMapper\EntityMapper;
use Entity\Book;

/** @var Book|null $existBook */
$existBook = EntityMapper::select(Book::class)->fetch();

if ($existBook) {
$existBook->title = 'Забытая книга';
$existBook->author = 'Неизвестный автор';
$existBook->publishedAt = null;
$existBook->active = false;
$updatedBitrixId = EntityMapper::save($existBook);
}
```