Categories: Мадженто 2

Основы ORM в Magento 2 – Модели, Ресурсы модели и Коллекции

В Magento 2 также, как и в Magento 1, используется ORM (объектно-реляционное отображение). Здесь также участвует шаблон Active Record (AR), который использует классы Модели, Ресурсной модели и Коллекции модели. Это позволяет использовать CRUD-функции в ваших собственных модулях, т.е., управлять данными в базе данных: создавать (create), читать (read), обновлять (update) и удалять (delete) данные.

ORM в Magento 2 используется реализациями Репозитория, которые являются частью сервисных контрактов (service contracts). Это важное отличие от Magento 1, так как модуль больше не должен зависеть от других модулей (использующих, возможно, разный ORM), а вместо этого использовать только хранилища сущностей.

Элементы ORM в Magento 2 следующие:

  • Модели – данные и поведение, представляющее сущности.
  • Ресурсные модели – отображение данных для структуры хранения.
  • Коллекции представляют собой инкапсулированные наборы моделей и связанные с ними функции, такие как фильтрация, сортировка и разбиение на страницы. Широко используются для хранения набора объектов определенного типа.
  • Ресурсы включают соединения с базой данных через адаптеры.

Концепция ORM в Magento 2 требует, чтобы только модели могли содержать данные и манипулировать ими. При создании новой модели, которая взаимодействует с базой данных, модели необходимо знать, какую Ресурсную модель следует использовать. Вот почему имя класса Ресурсной модели задается с помощью метода _init() в защищенной функции _construct(). Это необходимо для поддержки унаследованных методов getResource() и getCollection() класса AbstractModel.

Чтобы создать CRUD Модель, вы просто создаете класс и расширяете его с \Magento\Framework\Model\AbstractModel. Обратите внимание, что вы вызываете _init из метода конструктора с одним подчеркиванием, а не реального PHP конструктора с двойным подчеркиванием. Этот метод _construct() вызывается реальным методом __construct(), который унаследован через класс AbstractModel.

Ресурсная модель расширяется классом \Magento\Framework\Model\ResourceModel\Db\AbstractDb.

Коллекция расширяется классом \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection.

При создании Коллекции ресурсов необходимо указать, с какой моделью она соотносится, чтобы Коллекция могла создавать экземпляры соответствующих классов после загрузки списка записей. Также необходимо знать соответствующую Ресурсную модель, чтобы иметь возможность доступа к базе данных. Вот почему имена классов Модели и Ресурсной модели задаются с помощью метода _init() в защищенном методе _construct().

В Модели Magento2 используются CRUD методы load(), save() и delete(), которые соотносятся с Ресурсной моделью. Если вы хотите писать более безопасный код, не используйте CRUD методы в Модели, поскольку они могут быть удалены в будущем. Вместо этого Модель следует передавать непосредственно в CRUD методы в Ресурсной модели. Модель не имеет прямого доступа к базе данных, он есть только у Ресурсной модели.

Ресурсная модель обращается к базе данных через \Magento\Framework\Db\Adapter\Pdo и Zend\Db.

API, который используется для Коллекций, реализуется через \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection.

Коллекция ресурсов необходима для создания набора экземпляров Модели и работы с ними. Коллекции ресурсов делают ленивую загрузку (lazy load) набора записей, который они представляют. При первом обращении к списку элементов Коллекция будет загружена автоматически. После этого Коллекция не будет загружаться снова, даже если метод load() вызван явно.

Задача Коллекции состоит в том, чтобы извлекать набор строк из базы данных, затем выполнять итерацию по ним, а для каждой строки создавать экземпляр соответствующего класса Модели.

Это решает следующие задачи:

  • Предоставляет контейнер для хранения коллекций объектов.
  • Предотвращает ненужную загрузку данных.
  • Хранит все объекты во время сеанса.
  • Предоставляет интерфейс для фильтрации и сортировки объектов определенного вида.

Сервисные контракты в Magento 2

Сервисные контракты (service contracts) – это набор интерфейсов, с помощью которых в модулях можно объявлять стандартные API. С их помощью можно делать настройку без необходимости углубляться в ядро, а также они улучшают функциональную совместимость модулей.

Сервисные контракты выполняют ряд важных функций, таких как:

  • Улучшение процесса обновления
  • Формализация процесса кастомизации
  • Разделение функциональности модулей

В Magento 2 реализована концепция «разработка на основе интерфейса», в которой разработчик полагается только на публичные методы, объявленные в интерфейсе, а не на имплементацию:

  • Модули общаются только через API.
  • Один модуль не знает об устройстве другого, поэтому имплементация может изменяться.
  • Модули могут быть отключены или развернуты на отдельных серверах.

Теперь в Magento 2 вы можете настроить модуль, используя интерфейс API, который взаимодействует с Моделью, без непосредственного взаимодействия с ядром, что намного безопаснее.

Фабрика объектов в Magento 2

В объектно-ориентированном программировании фабричный (factory) метод – это метод, который используется для создания экземпляра объекта. Фабричные методы дают разработчику возможность контролировать, какие объекты фактически возвращаются в данном контексте.

В Magento 2 каждая CRUD модель имеет соответствующий фабричный класс. Все имена классов фабрики – это название класса Модели, к которому добавлено слово «Factory».

Фабричные классы в Magento 2 – это еще один пример использования системы автоматической генерации кода. Всякий раз, когда Менеджер объектов в Magento 2 встречает имя класса, оканчивающееся на слово Factory, он автоматически генерирует данный класс в папке generated/code, если такой класс еще не существует.

Краткий итог

В сегодняшней статье мы рассмотрели основы ORM и CRUD в Magento 2. Команда разработчиков Magento 2 делает основной упор на Репозиториях, сервисных контрактах и различных транспортных уровнях API, которые обеспечивают эти CRUD функции. Данных изменений мы коснулись вскользь, поскольку это является очень обширной темой. И она заслуживает большей детализации. Сегодня же мы уделили внимание основам ORM шаблона ActiveRecord, в котором используются классы Модели, Ресурсной модели и Коллекции модели. Ведь эти модели остаются жизненно важной частью любого инструментария разработчика на Magento 2.

Tags: Magento2

Recent Posts

Отопление и горячая вода – когда нужно, а не когда соизволят включить

Тепло в доме и горячая вода в любое время для многих жителей многоквартирных и частных… Read More

19/09/2020

Инструкция по скачиванию видео с сервиса TikTok (бесплатно и без watermark)

Если вы еще не слышали о TikTok, тогда рекомендуем вам сначала ознакомиться с этим кратким… Read More

17/09/2020

Что есть в бюджетном ноутбуке – на какие характеристики рассчитывать?

Прошли те времена, когда приличный ноутбук стоил от 1000 долларов. Сегодня можно купить довольно неплохой… Read More

16/09/2020

Что лучше – цифровое телевидение Т2 или интернет-телевидение?

Современную жизнь невозможно представить без телевидения. Оно позволяет узнавать о событиях в Украине и мире,… Read More

02/09/2020

Гипоаллергенная подушка. Для чего она важна?

Сейчас найдется мало людей, у которых нет аллергии на продукты или пыльцу растений. Считается, что… Read More

28/08/2020

Футбольный Инстаграм: что нового у топовых футболистов

Некоторые известные футболисты тщательно скрывают свои личную жизнь, а другие - активно постят фотографии с… Read More

24/08/2020