Содержание
Введение
Модель – это вспомогательный класс, используемый компонентом для записи и чтения данных из базы. С помощью модели можно автоматизировать наиболее частые операции с данными:
- добавление,
- чтение,
- изменение,
- удаление,
- фильтрацию.
Модель позволяет обойтись без написания «голых» SQL-запросов для обращения к базе данных. Вместо этого она предоставляет интерфейс (набор методов), позволяющих работать с записями в базе как с обычными ассоциативными массивами.
Термин «запись» здесь и далее обозначает, грубо говоря, одну строку в какой-либо таблице в базе. Либо, когда речь идет о чтении – одну строку из результатов запроса.
InstantCMS не использует ORM, поэтому сам термин «модель» здесь имеет несколько отличное от общепринятого значение. Модель в InstantCMS не является объектным представлением одной записи. Здесь модель – всего лишь объект, содержащий набор методов для работы с базой. То есть одна модель в InstantCMS может работать с любыми записями. Однако, есть и общие черты с ORM. Например, автоматическая фильтрация входящих данных.
Модель добавляет уровень абстракции между бизнес-логикой (контроллером) и хранилищем данных (базой). Теоретически, это может позволить изменить хранилище (например, использовать PostgreSQL вместо MySQL) без необходимости внесения правок в код контроллеров.
Модель и компоненты
Каждая модель является логической частью какого-либо компонента. Модель не может существовать без компонента. Однако, компонент может содержать только модель.
Модель берет на себя всю работу по извлечению и изменению данных. Другие части компонента (контроллеры, шаблоны) не должны содержать никакой логики связанной с получением или хранением данных в базе. Они могут только запрашивать нужные данные у модели или наоборот, передавать ей новые данные для сохранения.
Использование модели внутри компонента подробно описано в соответствующем разделе.
Класс модели
Путь к файлу модели формируется по схеме: /system/controllers/{компонент}/model.php
. Например, модель компонента «Комментарии» находится в файле /system/controllers/comments/model.php
.
Внутри файла определяется класс модели, название которого образуется как model{Компонент}
, например modelComments
. Сам класс наследуется от системного класса cmsModel:
class modelExample extends cmsModel {}
Или вы можете унаследовать свою модель от другой существующей модели
class modelExample extends modelContent {}
Начиная с версии InstantCMS 2.14.2 можно создавать модели для бэкендов. Путь к файлу модели формируется по схеме: /system/controllers/{компонент}/backend/model.php
. Например, бэкенд модель компонента «Контент» находится в файле /system/controllers/content/backend/model.php
.
Модель бэкенда обычно, но не обязательно, наследуют от основной модели, расширяя её:
class modelBackendExample extends modelExample {}
Как использовать объект этого класса описано здесь.