PHP code example of alexpago / bitrix-models

1. Go to this page and download the library: Download alexpago/bitrix-models library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

alexpago / bitrix-models example snippets


#!/usr/bin/env php

declare(strict_types=1);
$_SERVER['DOCUMENT_ROOT'] = str_replace('/bin', '', getenv('PWD'));




namespace Local\Models\Iblock;

use Pago\Bitrix\Models\IModel;
use Pago\Bitrix\Models\Queries\Builder;

/**
 * @property array CATALOG_ITEMS // Привязка к основным продуктам
 * @property string PRICE // Стоимость
 * @method static Builder|$this query()
 * @method Builder|$this get()
 * @method Builder|$this first()
 * @method Builder|$this whereCatalogItems(mixed $data, string $operator = '') // Привязка к основным продуктам
 * @method Builder|$this wherePrice(mixed $data, string $operator = '') // Стоимость
 */
class Catalog extends IModel
{

}

// Название таблицы через константу
const TABLE_NAME = 'b_hlblock_entity';
/**
 * Название таблицы через переопределение метода
 * @return string
 */
public static function getTableName(): string
{
    return 'b_user'; // Название таблицы
}



namespace Local\Models\Iblock;

use Pago\Bitrix\Models\IModel;

class CatalogModel extends IModel
{
    const IBLOCK_CODE = 'custom_catalog';
}

Loader::registerNamespace('Local\\Models', $_SERVER['DOCUMENT_ROOT'] . '/local/lib/models');

$elements = CatalogModel::query()->withProperties()->get(); // get() вернет массив элементов
foreach ($elements as $element) {
    
}

CatalogModel::query()->setFilter(['CODE' => 'massage'])->setLimit(10)->get();

CatalogModel::query()
    ->withProperties()
    ->whereCityId(1)
    ->orWhere('CITY_ID', 2)
    ->whereIblockSectionId(10)
    ->whereId(5, '>=') // по умолчанию всегда оператор = (равно), заполнять при необходимости указать другой
    ->get();

CatalogModel::query()->whereId(100)->first(); // first() вернет экземпляр класса

$products = Catalog::query()
    ->withProperties() // Прогрузить свойства инфоблоков
    ->wherePrice(200, '>=')
    ->whereBetween(
        property: 'DATE_CREATE',
        min: DateTime::tryeParse('01.01.2025', 'd.m.Y'),
        MAX: DateTime::tryeParse('01.03.2025', 'd.m.Y')
    )
    ->withCache()
    ->withDetailPageUrl() // Загрузить DETAIL_PAGE_URL для инфоблоков
    ->get();
$result = [];
foreach ($products as $product) {
    /**
     * @var Catalog $product 
     */
    $result[$product->ID] = [
        'PRICE' => $product->PRICE     
    ];
}

CatalogModel::query()->withProperties()->get();

// SALONS и CITY - свойства инфоблока. Обратите внимание, префикс PROPERTY указывать не нужно
CatalogModel::query()->setSelect(['ID', 'CODE', 'NAME', 'SALONS', 'CITY'])->get();

CatalogModel::query()->select('ID')->select('CODE', 'NAME')->get();

CatalogModel::query()->withProperties()->select('ID')->select('CODE', 'NAME')->get();

$element = CatalogModel::query()->withDetailPageUrl()->select('ID')->first();
$element->getDetailPageUrl();

CatalogModel::query()->where('ID', '>=', 1)->count();

CatalogModel::query()->setOrder(['ID' => 'ASC'])->get(); 

CatalogModel::query()->order('ID')->orderDesc('NAME')->get(); 

class CatalogModel extends IModel {
    public int $cacheTtl = 3600; // Кеш на 1 час
    public bool $cacheJoin = true;
}

$elements = CatalogModel::query()->withCache(3600, true)->get();

$elements = CatalogModel::query()->withProperties()->get();
foreach ($elements as $element) {
    // Свойство SALONS множественное
    // Экземпляр класса Bitrix\Main\ORM\Objectify\Collection
    $salons = $element->getSalons();
    foreach ($salons as $salon) {
        $salon->getValue();
    }
    // Свойство CITY не множественное
    // Экземпляр класса Bitrix\Iblock\ORM\ValueStorage
    $city = $element->getCity()->getValue();
}

$elements = CatalogModel::query()->get();
foreach ($elements as $element) {
    $result = $element->toArray();
}

$products = Catalog::query()
    ->where(
        property: 'DATE_CREATE',
        operator: '<=',
        value: DateTime::tryParse('01.01.2025', 'd.m.Y')
    )
    ->delete();
// Результат <array>Bitrix\Main\ORM\Data\Result
foreach ($products as $products) {
    $success = $product->isSuccess();
    $data = $product->getData();
}

$element = CatalogModel::query()->withProperties()->first();
// Результат Bitrix\Main\ORM\Data\Result
$element->delete();

// Массив с результатом [Bitrix\Main\ORM\Data\Result]
$delete = CatalogModel::query()->withProperties()->whereActive(false)->delete();

$element = CatalogModel::query()->withProperties()->first();
$element->NAME = 'Новое имя';
$element->SALON_ID = 135; // Свойство инфоблока SALON_ID
// Результат сохранения Bitrix\Main\ORM\Data\Result
$element->save();

$element = CatalogModel::query()->withProperties()->first();
// Result Bitrix\Main\ORM\Data\Result
$element->update([
    'NAME' => 'Новое имя'
]);

$data = [
    'ACTIVE' => true
];
// Массив с результатом [Bitrix\Main\ORM\Data\Result]
$delete = CatalogModel::query()->withProperties()->whereActive(false)->update($data);

$element = new CatalogModel();
$element->NAME = 'Имя нового элемента';
// Результат сохранения Bitrix\Main\ORM\Data\Result
$element->save();

$products = Catalog::query()
    ->withProperties()
    ->withCache()
    ->withDetailPageUrl()
    ->get();
$result = [];
foreach ($products as $product) {
    /**
     * @var Catalog $product
     */
     $product->PRICE = $product->PRICE + 200;
     $product->save();
}

/**
 * Событие вызываемое перед добавлением элементам
 * @return void
 */
protected function onBeforeAdd(): void
{
    // actions
}

/**
 * Событие вызываемое после добавление элемента
 * @param \Bitrix\Main\ORM\Data\Result $result
 * @return void
 */
protected function onAfterAdd(Result $result): void
{
    // actions
}

/**
 * Событие вызываемое перед обновлением элемента
 * @return void
 */
protected function onBeforeUpdate(): void
{
    // actions
}

/**
 * Событие вызываемое после обновления элемента
 * @param \Bitrix\Main\ORM\Data\Result $result
 * @return void
 */
protected function onAfterUpdate(Result $result): void
{
    // actions
}

/**
 * Событие вызываемое перед удалением элемента
 * @return void
 */
protected function onBeforeDelete(): void
{
    // actions
}

/**
 * Событие вызываемое после удаления элемента
 * @param \Bitrix\Main\ORM\Data\Result $result
 * @return void
 */
protected function onAfterDelete(Result $result): void
{
    // actions
}

protected function onBeforeUpdate(): void
{
    $data = $this->getProperties(); // Текущие свойства
    $originalData = $this->getOriginalProperties(); // Свойства при инициализации модели
    $changedData = $this->getChangedProperties(); // Измененные свойства
    // Можно предопределить данные
    $this->NAME .= ' Обновлено';
}