Download the PHP package alexpago/bitrix-models without Composer

On this page you can find all versions of the php package alexpago/bitrix-models. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package bitrix-models

Bitrix модели (Таблицы, Инфоблоки, Highload)

Данный модуль позволяет легко обращаться к инфоблокам, Highload-блокам, таблицам в Bitrix CMS.

Текущий модуль не использует иных зависимостей и работает исключительно как фасет ядра D7.

Установка

  1. Устанавливаем модуль
  2. Подключаем автозагрузку моделей-классов при необходимости. Подробнее в разделе: Автозагрузка моделей
  3. Для удобства создания моделей создаем бинарный файл по пути bin/model. Содержимое файла:

Обновление 1.2.0

Внимание: Информация для обновления с версии 1.1.x (и старее) до 1.2.x

Автозагрузка классов

При обновлении, если вы использовали автозагрузку моделей и используете модели по директории local/lib/models/, просьба обратить внимание на то, что для включения автозагрузки модулей теперь необходимо объявить константу const AUTOLOAD_MODELS = true перед подключением composer (желательно в dbconn.php) или подключить загрузку вручную.
Подробнее про автозагрузку классов в разделе: Автозагрузка моделей

Работа с инфоблоками

В связи с медленной работой загрузки свойств и некорректной работой множественных свойств была переработана логика получения свойств. В целом старая логика должна быть сохранена, но могут возникнуть проблемы "при переезде". В локальных проектах проблем не наблюдалось, но стоит обратить внимание.
На текущий момент работа с инфоблоками полностью работоспособна без дополнительных методов getValue, getCollection.
Для сохранения свойств из модели необходимо указать имя свойства без префикса PROPERTY. Например:
$model->PRICE = 500; $model->save()

Скорость загрузки элементов инфоблоков

Загрузка свойств ускорена в 2 раза. При использовании параметра ->withCache() скорость увеличивается до 4 раз.

Генерация моделей

Весь класс логики был перемещен в Builder. Таким образом, при разработке больше не будут всплывать методы, которые не относятся к модели.
Для удобства разработки рекомендуем перегенерировать модели и переиспользовать phpdoc из новых моделей, применив к старым.

Update, Save, Delete

Методы update, save, delete теперь разделены логикой и обрабатываются по-разному в модели и в построителе запроса.
Например: Если это построитель запроса ->query()->where('ID', 5)->delete(), то будет возвращен массив со всеми удаленными элементами array<Bitrix\Main\ORM\Data\Result>.
В случае удаления элемента из модели будет возвращен Bitrix\Main\ORM\Data\Result. Данная логика распространяется на методы: update, delete.
Обратите внимание, что старые методы elementUpdate и elementDelete помечены как устаревшие. Рекомендуется их не использовать и заменить на update, delete.

Новые методы-операторы

Добавлены новые операторы. Подробнее можно почитать в разделе: Доступные методы фильтрации

Символьные коды инфоблоков

Ранее при некорректном символьном коде возникали ошибки создания модели. На текущий момент модель будет создана даже при некорректном названии с уведомлением о необходимости её переименования и рекомендацией действий.

Создание моделей в автоматическом режиме

Для создания моделей инфоблоков выполните команду: php bin/model iblock.

Для создания моделей highload-блоков выполните команду: php bin/model hlblock.

Для создания моделей таблиц выполните команду: php bin/model table.

Путь создания моделей: По умолчанию модели создаются в директории local/lib/models с namespace Local\Models. Для переопределения пути и namespace необходимо передать аргументы path и namespace соотвественно. Например: php bin/model table --path=/local/models/table/ --namespace=Local\Table

В результате выполнения команды отобразится список highload-блоков или инфоблоков, в зависимости от типа модели. Для таблицы будет отображено поле ввода названия таблицы.

Выберите необходимые модели для генерации.

Можно перечислить идентификаторы или названия таблиц прямо в команде через пробел: php bin/model iblock 15 16 или php bin/model table b_user

Внимание, для инфоблоков в процессе создания модели будет автоматически заполнен API_CODE инфоблока при его отсутствии.

Внимание, для инфоблоков и работы модуля D7 необходим заполненный API_CODE у инфоблока.

После создания модели будет создан файл с примерным содержимым:

Создание моделей вручную

Инфоблок:

Необходимо создать класс наследуясь от класса Название класса должно соответствовать символьному коду инфоблока в CamelSpace.

Опционально: Если необходимо, чтобы символьный код отличался от названия класса, то необходимо заполнить константу const IBLOCK_CODE с указанием символьного кода инфоблока.

Опционально 2: Если идентификатор инфоблока является статическим на всех проектах, то желательно указать его заполнив константу . Таким образом системе не нужно будет определять идентификатор инфоблока и система сэкономит один SQL запрос.

Highload-блок:

Необходимо создать класс наследуясь от класса Название класса должно соответствовать коду справочника в CamelSpace.

Опционально: Если необходимо, чтобы символьный код отличался от названия класса, то необходимо заполнить константу const HL_CODE с указанием символного кода справочника или const HL_ID с указанием ID справочника.

Таблица:

Необходимо создать класс наследуясь от класса Название класса должно соответствовать названию таблицы в CamelSpace.

Опционально: Если необходимо, чтобы название таблицы отличалось от названия модели, можно заполнить метод с названием таблицы или указать константу const TABLE_NAME

Пример названия модели по символьному коду: символьный код инфоблока/справочника custom_catalog, тогда название класса будет CatalogModel.

Пример названия модели по названию таблицы: таблица b_option_sites будет BOptionSites

Пример готовой модели инфоблока:

Автозагрузка моделей

Расположение моделей является сугубо Вашей фантазией. Если Вы не планируете писать большой код в проекте, то можно воспользоваться стандартными средствами загрузки классов моделей. По умолчанию модели создаются в директории local/lib/models с namespace Local\Models. Они не подключаются автоматически. Для автоматического подключения необходимо объявить константу const AUTOLOAD_MODELS = true перед подключением composer (желательно в dbconn.php) или подключить загрузку вручную. Для ручной загрузки необходимо вставить код до его использования, например в init.php

Получение элементов

Работа с классами аналогична работе с Bitrix D7 запросами.

Базовый запрос

Базовый запрос с фильтрацией и лимитом

Примечание: можно использовать сокращенный вариант установки лимита ->limit(10) или передать первый параметр в ->get(10) Например:

Заметка: для установки смещения ->setOffset(50) или ->offset(50) или передать значение вторым параметром в ->get(10, 50) Например: CatalogModel::query()->get(10, 50)

Поэтапное заполнение фильтра

Метод setFilter устанавливает фильтр перезаписывая все ранее установленные условия.

Взамен setFilter можно использовать where(column, operator, value).

Для поиска OR после условия where можно использовать orWhere(column, operator, value).

Доступные методы фильтрации:

where(string $property, $operator, $data = null): static

Фильтрация с условием для указанного свойства.

Параметры:


whereIn(string $property, array $values): static

Фильтрация с условием IN для указанного свойства.

Параметры:


orWhereIn(string $property, array $values): static

Фильтрация с условием OR IN для указанного свойства.

Параметры:


whereProperty(string $property, string $property2): static

Фильтрация, где свойство сравнивается с другим свойством.

Параметры:


orWhereProperty(string $property, string $property2): static

Фильтрация с условием OR, где одно свойство сравнивается с другим.

Параметры:


whereNotIn(string $property, array $values): static

Фильтрация с условием NOT IN для указанного свойства.

Параметры:


orWhere(string $property, $operator, $data = null): static

Фильтрация с условием OR для указанного свойства.

Параметры:


whereNotNull(string $property): static

Фильтрация по условию "не равно NULL" для указанного свойства.

Параметры:


whereNull(string $property): static

Фильтрация по условию "равно NULL" для указанного свойства.

Параметры:


whereBetween(string $property, $min, $max): static

Фильтрация с условием "между" для указанного свойства.

Параметры:


whereNotBetween(string $property, $min, $max): static

Фильтрация с условием "не между" для указанного свойства.

Параметры:

Также существует упрощенный вариант фильтрации по полям whereColumn(value, operator). Column должен быть заполнен в CamelSpace. Доступны все поля, включая свойства инфоблока. Например: Свойство с кодом CITY_ID можно отфильтровать как whereCityId(value)

Внимание: operator по умолчанию = (равно)

Внимание: если выполнить setFilter после where или whereColumn, то предыдущие значения будут стерты и учитываться будут только данные из setFilter

Пример фильтрации:

Получение одного элемента

Если нужно получить элемент в виде массива, используйте firstArray(). Вызов метода firstArray() аналогичен цепочке вызовов first()->toArray()

Выборка

Пример выборки с фильтрацией

По умолчанию если не указывать setSelect будут выбраны все поля инфоблока без свойств.

Внимание:

Для получения всех свойств инфоблока необходимо вызвать метод withProperties.

Пример:

Если нужно получить элементы в виде массива, используйте getArray(). Вызов метода getArray() аналогичен цепочке вызовов get()->toArray()

Пример с заполнением выборки:

Пример с поэтапным пополнением выборки:

Пример с поэтапным пополнением выборки и выгрузкой всех свойств:

Внимание: не рекомендуется выгружать все свойства без строгой необходимости Внимание: DETAIL_PAGE_URL не принадлежит элементам. Для получения используйте метод getDetailPageUrl(). Если необходимо заранее получить список детальных страниц, перед get рекомендуем использовать withDetailPageUrl()

Пример с получением detail page url:

Пагинация

Метод getPaginate предоставляет функциональность для получения объекта пагинации, который содержит информацию о текущей странице, общем количестве страниц, данных для отображения и других параметрах, связанных с пагинацией. Этот метод возвращает объект класса Pago\Bitrix\Models\Structures\Paginator. Параметры:

Возвращаемое значение:

Метод возвращает объект класса Paginator с несколькими аттрибутами, которые содержат информацию о пагинации. Атрибуты объекта Paginator:

У Paginator так же имеется метод toArray который переводит весь массив в ответ. Ответ будет аналогичен свойствам за исключением data. В свойстве data так же расположится информация моделей в виде массивов (к каждой модели применяется toArray)

Количество элементов

Пример получения количества элементов:

Сортировка

Сортировка происходит путем заполнение массивом через метод setOrder или путем наполнения order(column) и orderDesc(column)

Пример:

Пример заполнением:

Внимание: если выполнить setOrder после order или orderDesc, то предыдущие значения будут стерты и учитываться будут только данные из setOrder

Кеширование

Запросы можно кешировать. Для этого используйте withCache(). Метод принимает два аргумента: время жизни кэша в секундах и bool для кеширования join. Так же заранее можно предопределить в классе свойства public int $cacheTtl и public bool $cacheJoin.

Пример запроса с кешированием на час и кешированием join:

Если в классе установлен кэш по умолчанию, то его можно отключить для определенного запроса методом withoutCache()

Преобразование результатов

По умолчанию данные возвращаются объектами ORM D7.

Пример обработки запроса:

Так же можно приводить результат в массив

Пример:

Внимание: метод toArray вернет так же зависимости привязок. Например IBLOCK_ELEMENT_ID. Для получения только значения VALUE используйте $element->toArrayOnlyValues()

Действия

У моделей доступны быстрые действия.

Удаление элемента

Пример массового удаления из query

Любой элемент можно удалить одной командой

Так же можно удалить элементы по фильтру не получая их экземпляры

Обновление элемента

Обновление элемента происходит путем присваивания ему новых свойств через магический метод __set, с последующим вызовом метода save().

Так же можно воспользоваться методом update()

Метод update() можно применять аналогично delete() к query запросу

Создание элемента

Создание нового элемента аналогично обновлению через save(). Для начала необходимо создать экземпляр объекта и заполнить его данными. После заполнения вызвать метод save().

Пример редактирования моделей из запросов

Так же можно использовать метод put(), который вызовет метод save() и вернет экземпляр созданного объекта.

События

У моделей можно добавлять события на добавление, изменение и удаления элементов. Доступны следующие события:

Для получения списка изменяемых свойств можно использовать метод getChangedProperties

Пример:


All versions of bitrix-models with dependencies

PHP Build Version
Package Version
Requires php Version >=8.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package alexpago/bitrix-models contains the following files

Loading the files please wait ....