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.
Download alexpago/bitrix-models
More information about alexpago/bitrix-models
Files in alexpago/bitrix-models
Informations about the package bitrix-models
Bitrix models
Данный модуль позволяет легко обращаться к инфоблокам, Highload-блокам, таблицам в Bitrix CMS.
Текущий модуль не использует иных зависимостей и работает исключительно как фасет ядра D7.
Установка
- Устанавливаем модуль
- Для удобства создания моделей создаем бинарный файл по пути bin/model. Содержимое файла:
Создание моделей в автоматическом режиме
Для создания моделей инфоблоков выполняем команду . В результате выполнения команды отобразится список инфоблоков:
Выберите необходимые модели для генерации. В процессе создания модели будет автоматически заполнен API_CODE инфоблока при его отсутствии. Внимание: для модуля D7 необходим заполненный API_CODE у инфоблока.
После создания модели будет создан файл с примерным содержимым:
Создание моделей в ручном режиме
Инфоблок: Необходимо создать класс наследуясь от класса
Название класса должно соответствовать символьному коду инфоблока в camelSpace.
Пример: символьный код инфоблока certificates_services, тогда название класса будет CertificatesServices
Опционально: Если необходимо, чтобы символьный код отличался от названия класса, то необходимо заполнить константу с указанием символьного кода инфоблока.
Пример:
Опционально: Если идентификатор инфоблока является статическим на всех проектах, то желательно указать его заполнив константу . Таким образом системе не нужно будет определять идентификатор инфоблока и система сэкономит один SQL запрос. Пример:
Получение элементов
Работа с классами аналогична работе с Bitrix D7 запросами.
Базовый запрос
Базовый запрос с фильтрацией и лимитом
Заметка: можно использовать сокращенный вариант установки лимита
->limit(10)
или передать первый параметр в->get(10)
Например:Заметка: для установки смещения
->setOffset(50)
или->offset(50)
или передать значение вторым параметром в->get(10, 50)
Например:CertificatesServices::query()->get(10, 50)
Поэтапное заполнение фильтра
Метод setFilter
устанавливает фильтр сбрасывая предыдущие условия, если они были установлены ранее.
Взамен setFilter
можно использовать where(column, operator, value)
.
Для поиска OR после условия where
можно использовать orWhere(column, operator, value)
.
Так же существует упрощенный вариант фильтрации по полям 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
:
Количество элементов
Пример получения количества элементов:
Сортировка
Сортировка происходит путем заполнение массивом через метод 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()
Действия
У моделей доступны быстрые действия.
Удаление элемента
Любой элемент можно удалить одной командой
Так же можно удалить элементы по фильтру не получая их экземпляры
Обновление элемента
Обновление элемента происходит путем присваивания ему новых свойств через магический метод __set,
с последующим вызовом метода save()
.
Так же можно воспользоваться методом update()
Метод update()
можно применять аналогично delete()
к query
запросу
Создание элемента
Создание нового элемента аналогично обновлению через save()
. Для начала необходимо
создать экземпляр объекта и заполнить его данными. После заполнения вызвать метод save()
.
Так же можно использовать метод
put()
, который вызовет методsave()
и вернет экземпляр созданного объекта.
События
У моделей можно добавлять события на добавление, изменение и удаления элементов. Доступны следующие события:
Для получения списка изменяемых свойств можно использовать метод
getChangedProperties
Пример: