В 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.
Сьогоднішній огляд присвячений людям, для яких важливе питання конфіденційності в Інтернеті, та хто цінує свої…
Вперше про бренд Pro Plan почули у 1986 році, коли він став частиною американської компанії…
Страх покарання гірше самого покарання (Покарання — завжди щось конкретне, і воно все ж краще,…
Якщо ви плануєте розмістити веб-сайт в мережі Інтернет, дуже важливо знайти для нього швидкий і…
Навчання за кордоном вже давно асоціюється з якісною освітою, новими можливостями та безліччю перспектив. Але…
Вибір майстра для ремонту та перетяжки меблів – завдання, яке потребує вдумливого підходу. Адже від…