Коварная война россии против Украины. Ориентировочные потери врага
(по состоянию на 15.03.2024)
428420
солдат
347
самолетов
325
вертолетов
6758
танков
12949
ББМ
10580
артиллерия
717
ПВО
1017
РСЗО
13993
машин
26
корабли и катера
Основы ORM в Magento 2 – Модели, Ресурсы модели и Коллекции
Опубликовано Обновлено: 22.07.2019

Основы 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.

 

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *