В 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()
вызван явно.
Задача Коллекции состоит в том, чтобы извлекать набор строк из базы данных, затем выполнять итерацию по ним, а для каждой строки создавать экземпляр соответствующего класса Модели.
Это решает следующие задачи:
Сервисные контракты (service contracts) – это набор интерфейсов, с помощью которых в модулях можно объявлять стандартные API. С их помощью можно делать настройку без необходимости углубляться в ядро, а также они улучшают функциональную совместимость модулей.
Сервисные контракты выполняют ряд важных функций, таких как:
В Magento 2 реализована концепция «разработка на основе интерфейса», в которой разработчик полагается только на публичные методы, объявленные в интерфейсе, а не на имплементацию:
Теперь в Magento 2 вы можете настроить модуль, используя интерфейс API, который взаимодействует с Моделью, без непосредственного взаимодействия с ядром, что намного безопаснее.
В объектно-ориентированном программировании фабричный (factory) метод – это метод, который используется для создания экземпляра объекта. Фабричные методы дают разработчику возможность контролировать, какие объекты фактически возвращаются в данном контексте.
В Magento 2 каждая CRUD модель имеет соответствующий фабричный класс. Все имена классов фабрики – это название класса Модели, к которому добавлено слово «Factory».
Фабричные классы в Magento 2 – это еще один пример использования системы автоматической генерации кода. Всякий раз, когда Менеджер объектов в Magento 2 встречает имя класса, оканчивающееся на слово Factory, он автоматически генерирует данный класс в папке generated/code
, если такой класс еще не существует.
В сегодняшней статье мы рассмотрели основы ORM и CRUD в Magento 2. Команда разработчиков Magento 2 делает основной упор на Репозиториях, сервисных контрактах и различных транспортных уровнях API, которые обеспечивают эти CRUD функции. Данных изменений мы коснулись вскользь, поскольку это является очень обширной темой. И она заслуживает большей детализации. Сегодня же мы уделили внимание основам ORM шаблона ActiveRecord, в котором используются классы Модели, Ресурсной модели и Коллекции модели. Ведь эти модели остаются жизненно важной частью любого инструментария разработчика на Magento 2.
Визуальная привлекательность является ключевой особенностью любого сайта на ВордПрессе. Посетители чаще будут открывать ссылки, украшенные…
Любые собеседования всегда волнуют, и даже могут вызвать определенную степень нервозности. Однако, если вы будете…
Изменить я этого не могу, остается извлекать из этого пользу Артур Шопенгауэр
По умолчанию после каждой установки WordPress есть три основных URL-адреса для входа в админку: {домен}/wp-admin.php,…
Производительность – это валюта фрилансера. Когда ты работаешь сам на себя, никто не спросит: "Сколько…