Модели в Magento – краткий обзор

Работа с данными в Magento основана на трех принципах: Модели, Ресурсы модели и Коллекции. Модель – это буква «M» в аббревиатуре MVC (Model-View-Controller, Модель-Представление-Контроллер). Модели отвечают за бизнес-логику любого PHP приложения, и это не является исключением для Magento. Поскольку Magento использует архитектурный шаблон MVC, Модели в движке используются для инкапсуляции бизнес-логики (т.е., совокупности правил, принципов и зависимостей поведения объектов). Главной задачей для Модели в Мадженто является обработка данных из базы данных, поскольку она управляет всеми логическими операциями с базой данных.

Все Модели размещаются в папке «Model» модуля. Чтобы использовать модели в Magento, вам нужно указать их в конфигурационном файле вашего модуля (config.xml).

Все модели Magento наследуются от Mage_Core_Model_Abstract. Magento разделяет Модель на две части: непосредственно модели, которые обрабатывают бизнес-логику, и на Ресурсы модели, которые призваны общаться с базой данных. Ресурс модели также имеет два разных типа: Entity и Mysql4.

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

Magento использует шаблон Singleton в форме хранения данных в глобальном реестре. Здесь возникает разница между методами Mage::getModel() и Mage::getSingleton(). Последний метод проверяет, был ли создан экземпляр запрошенного класса, и если это так – возвращает объект из реестра. В противном случае создается экземпляр класса и сохраняется в реестре.



 

 

Ресурс модели Magento

Ресурс модели соединяется с базой данных и выполняет операции CRUD. Он управляет различными соединениями для чтения/записи.

Все Ресурсы модели расширяют класс Mage_Core_Model_Resource_Db_Abstract.

В конфигурационном файле модуля в ноде <resourceModel> указывается информация о Ресурсе модели. Она говорит Magento, где найти префикс класса при использовании фабричного метода Mage::getResourceModel().

Для извлечения Ресурсов модели также можно использовать удобные методы, например, Mage::getResourceModel() и Mage::getResourceSingleton(). И если у вас есть объект модели, его сопутствующий Ресурс модели можно получить с помощью метода Mage::getModel()->getResource().

 

 

Коллекции Модели в Magento:

Когда нам нужны результаты, основанные на разных моделях, тогда нам нужно создать Коллекцию или же использовать существующую Коллекцию. Это дает нам массу удобных методов, упрощая манипулирование сущностями и уменьшая необходимость писать сложные sql запросы. Если модель соотносится со строкой таблицы в качестве объекта, то Коллекция соотносится с набором таких строк.

Если вы указали в файле конфигурации настройки для использования Ресурсов модели, у вас уже есть все необходимое для создания Коллекций. Коллекции следуют соглашению об именовании на основе Ресурсов модели. Конфиг берет название Ресурса модели и добавляет _collection в конец этого названия. Это означает, что имя класса и имя файла должны соответствовать этому соглашению.

Все Коллекции расширяют Mage_Core_Model_Resource_Db_Collection_Abstract.

Для получения коллекции используется метод Mage::getModel()->getCollection(). Однако можно использовать и другую похожую запись Mage::getResourceModel('module/model_collection'), которая позволяет опустить создание экземпляра класса модели.