PHPackages                             maximaster/tools.orm - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. maximaster/tools.orm

ActiveLibrary[Database &amp; ORM](/categories/database)

maximaster/tools.orm
====================

Библиотека предоставляет инструменты для работы с инфоблоками через ORM d7

47638↓33.3%11[6 issues](https://github.com/maximaster/tools.orm/issues)PHP

Since Oct 23Pushed 6mo ago6 watchersCompare

[ Source](https://github.com/maximaster/tools.orm)[ Packagist](https://packagist.org/packages/maximaster/tools.orm)[ RSS](/packages/maximaster-toolsorm/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

Библиотека редоставляет возможность выполнять выборку данных из инфоблоков вместе со свойствами. Значения свойств выбираются "как есть", модификация данных к ним не применяется.

Для составления запросов к одиночным инфоблокам, нужно создать свою сущность, которая будет описывать инфоблок. Для этого нужно создать класс, который будет являться наследником класса Maximaster\\Tools\\Orm\\Iblock\\ElementTable. Этот класс должен реализовывать лишь один метод, который должен вернуть идентификатор инфоблока:

```
class ProductTable extends Maximaster\Tools\Orm\Iblock\ElementTable
{
    public static function getIblockId()
    {
        return 1;
    }
}
```

Теперь можно пользоваться данным классом для обращения к инфоблоку с ID = 1. Устанавливать фильтр по инфоблоку в этом случае не нужно, при запросе фильтр будет автоматически добавлен. Фильтры со сложной логикой и с модификаторами не отслеживаются, поэтому отслеживать задание фильтров по другим инфоблокам нужно самостоятельно.

Для получения значения свойства нужно использовать имя поля 'PROPERTY\_CODE\_VALUE', где CODE - это символьный код свойства. Для получения описания значения свойства, нужно использовать имя поля 'PROPERTY\_CODE\_DESCRPTION'.

Если свойство имеет тип "Привязка к элементу", то в значении будет находиться референс на этот элемент. Можно использовать этот референс, чтобы обратиться к полям и свойствам связанных сущностей, например:

```
$stadiumList = PriceTable::query()
    ->addFilter('STADIUM_EXTERNAL_ID', 21)
    ->setSelect(array('NAME', 'ACTIVE_FROM'))
    ->addSelect('PROPERTY_MATCH_VALUE.PROPERTY_STADIUM_VALUE.PROPERTY_SEATROOT_ID_VALUE', 'STADIUM_EXTERNAL_ID');
```

Сама сущность свойства хранится в поле 'PROPERTY\_CODE' для всех свойств (множественных и нет) кроме одиночных свойств инфоблоков 2.0. Для них сущность хранится в 'PROPERTY\_TABLE\_IBLOCK\_N', где N - это идентификатор инфоблока. Для совместимости у каждого свойства 2.0 есть также референс PROPERTY\_CODE, который ссылается на таблицу со всеми значениями всех одиночных свойств. Использовать его имеет смысл только для получения ID значения свойства. Например, получить ID значения большинства свойств можно через поле 'PROPERTY\_CODE.ID'. Для инфоблоков 1.0, а также для множественных свойств можно получить дополнительную информацию.

Для составления запроса к нескольким инфоблокам сразу, не нужно использовать наследника класса Maximaster\\Tools\\Orm\\Iblock\\ElementTable, а напротив, использовать этот класс самостоятельно. Например:

```
$db = Maximaster\Tools\Orm\Iblock\ElementTable::query()
	->addFilter('@IBLOCK_ID', [22, 20])
	->addSelect('PROPERTY_PAIR_SECTOR_VALUE') // Это из инфоблока 22
	->addSelect('PROPERTY_CALENDAR_ID_VALUE') // А это - из 20
	->addSelect('NAME')
```

Также доступен динамический конструктор сущности, по аналогии с Higload-блоками:

```
$entity = ElementTable::compileEntity(1)->getDataClass();
$entity::query()
	->addSelect('IBLOCK_ID');
```

Результатом выполнения подобного запроса будет таблица, которая будет содержать список всех элементов из 2х инфоблоков. В каждой записи будут доступны те свойства, которые есть у инфоблока. **Внимание - свойства с одинаковыми кодами в нескольких разных инфоблоках пока не поддерживаются.**

Все свойства всех используемых в фильтре инфоблоков будут подцеплены к запросу автоматически и будут подцепляться к нему на каждом запросе, поэтому **будьте внимательны** и **следите за производительностью**. Составление каждого такого запроса может занимать достаточно **длительное время (сотые доли секунды)**.

Для того, чтобы достать URL детальной страницы, нужно использовать поле DETAIL\_PAGE\_URL. Поскольку это поле - шаблонное, то оно наполняется после выборки. Для того, чтобы оно корректно наполнилось, необходимо позаботиться о том, чтобы среди выбираемых полей были все те, которые используются в шаблоне DETAIL\_PAGE\_URL.

###  Health Score

26

—

LowBetter than 43% of packages

Maintenance43

Moderate activity, may be stable

Popularity29

Limited adoption so far

Community19

Small or concentrated contributor base

Maturity13

Early-stage or recently created project

 Bus Factor1

Top contributor holds 50% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/063eabc66470fad298c3d9ff12eda282d784a068932a62cd48a4e5a261433c24?d=identicon)[mmjurov](/maintainers/mmjurov)

---

Top Contributors

[![mmjurov](https://avatars.githubusercontent.com/u/802208?v=4)](https://github.com/mmjurov "mmjurov (12 commits)")[![nook-ru](https://avatars.githubusercontent.com/u/444489?v=4)](https://github.com/nook-ru "nook-ru (5 commits)")[![Mike-maximaster](https://avatars.githubusercontent.com/u/31412022?v=4)](https://github.com/Mike-maximaster "Mike-maximaster (4 commits)")[![111ypuk](https://avatars.githubusercontent.com/u/13017017?v=4)](https://github.com/111ypuk "111ypuk (2 commits)")[![shoman4eg](https://avatars.githubusercontent.com/u/2788396?v=4)](https://github.com/shoman4eg "shoman4eg (1 commits)")

### Embed Badge

![Health badge](/badges/maximaster-toolsorm/health.svg)

```
[![Health](https://phpackages.com/badges/maximaster-toolsorm/health.svg)](https://phpackages.com/packages/maximaster-toolsorm)
```

###  Alternatives

[doctrine/orm

Object-Relational-Mapper for PHP

10.2k285.3M6.2k](/packages/doctrine-orm)[jdorn/sql-formatter

a PHP SQL highlighting library

3.9k115.1M102](/packages/jdorn-sql-formatter)[illuminate/database

The Illuminate Database package.

2.8k52.4M9.4k](/packages/illuminate-database)[ramsey/uuid-doctrine

Use ramsey/uuid as a Doctrine field type.

90440.3M211](/packages/ramsey-uuid-doctrine)[reliese/laravel

Reliese Components for Laravel Framework code generation.

1.7k3.4M16](/packages/reliese-laravel)[wildside/userstamps

Laravel Userstamps provides an Eloquent trait which automatically maintains `created\_by` and `updated\_by` columns on your model, populated by the currently authenticated user in your application.

7511.7M13](/packages/wildside-userstamps)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
