Поиск…


замечания

сущность

Сохраняет информацию о типе хранимых данных. В случае Magento это клиент, продукт, категория и т. Д.

атрибут

Индивидуальные свойства каждого из объектов, например имя, вес, адрес электронной почты и т. Д.

Значение

Значение данного объекта и атрибута. Например, мы можем указать объект клиента и атрибут электронной почты, а затем дать ему значение [email protected].

Схема базы данных

eav_entity

Таблица сущностей.

eav_entity_attribute

Таблица атрибутов.

eav_entity_ {тип}

Таблицы значений. Типы - это datetime, decimals, int, text и varchar.

Важно отметить, что таблица eav_entity_varchar имеет тип varchar для значений, даже если дата или целое число будет лучше соответствовать значению.

Модели против моделей ресурсов

Все модели внутри Mage / Eav / Model / Resource - Mysql4 и являются ресурсными моделями.

Кроме того, Entity / Abstract.php и Entity / Setup.php.

Flat Versus EAV

Модели EAV более сложны, обеспечивая логику сохранения и загрузки из нескольких таблиц, тогда как плоские или стандартные модели являются относительно простыми (традиционными).

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

Примеры моделей ресурсов EAV

Чтобы найти объекты, использующие схему хранения EAV для поиска строки, можно использовать Mage_Eav_Model_Entity_Abstract. Это должно выявить все модели ресурсов, основанные на структуре EAV. Однако в результирующий список будут включены многие устаревшие классы из модуля Mage_Sales, которые больше не используются.

Единственными модулями, содержащими объекты, использующие схему хранения EAV, являются Mage_Catalog (категории и продукты) и Mage_Customer (клиенты и адреса).

Группы клиентов используют схему хранения плоских таблиц. Все объекты продаж, которые преобразуются в объекты с плоскими таблицами с выпуском Magento 1.4.

Причина, по которой EAV используется, заключается в том, что объекты могут иметь неопределенное количество свойств и, следовательно, оставаться гибкими. Например, когда вы добавляете новый атрибут к объекту Customer (который является объектом EAV), таблицу базы данных не нужно изменять для добавления этого нового атрибута.

преимущества

Схему схемы гибкости не нужно менять с помощью модели Quick для реализации

Недостатки

  • неэффективный

Запрос, возвращающий 20 столбцов, обычно будет состоять из 20 самоподключений в EAV. Однако модуль Mage_Eav обычно не использует объединения для загрузки данных значения атрибута. Вместо этого используются селекции union. Соединения используются только для фильтрации коллекций EAV.

  • Механизм взаимосвязи между подтипами отсутствует
  • Отсутствие группировки подтипов объектов

Веб-сайты и магазины

Чтобы обрабатывать веб-сайт и сохранять значения атрибутов области в EAV, в объекте каталога существует значение store_id, чтобы отображать область, которая ссылается на core_store. Наряду с обычными магазинами (представления магазина) есть также «0», который является глобальным значением. Когда в определенном магазине система сначала проверит значение сущности в текущем хранилище, а затем вернется к глобальному объекту. Поля Mage_Customer EAV не имеют столбца области store_id.

Вставить, обновить и удалить

Чтобы определить, нужно ли вставлять, обновлять или удалять атрибут, выполняется сравнение с исходным объектом. Исходный объект является в основном дубликатом объекта данных, когда объект был извлечен из базы данных.

  • Если атрибут существует первоначально, а его новое значение не пустое; он обновляется.
  • Если атрибут существует первоначально, но его новое значение установлено на пустое; он удаляет. - Если атрибут не существует первоначально, и его новое значение не пусто; он вставляет.

Управление атрибутами

Модели атрибутов

Модель атрибута Представляет атрибут в форме базы данных, его логика является стандартной для всех атрибутов и ее трудно изменить .

Модель Frontend

Интерфейс атрибута к интерфейсу и обеспечивает любую логику, которая требуется атрибуту для интерфейса, например метод getUrl () на изображениях.

Модель бэкэнд

Они выполняют проверку атрибута перед его сохранением в базе данных. Например, базовая модель пароля преобразует пароль в хэш прежде, чем он будет сохранен. Он также проверяет, что пароль и подтверждение пароля совпадают перед сохранением.

Исходные модели

Используется для заполнения опций, доступных для атрибута, например, каталог / product_status включен и отключен.

Необходимые методы

Для исходной модели требуется:

<?php
    public function getAllOptions();
    public function getOptionText($value);
?>

Обычно необходимо реализовать только getAllOptions (), поскольку реализация для getOptionText () уже существует в абстрактной исходной модели Mage_Eav_Model_Entity_Attribute_Source_Abstract.

Для модели frontend не требуется метод getValue ().

Бэкэнд-модель требует:

<?php
    public function getTable();
    public function isStatic();
    public function getType();
    public function getEntityIdField();
    public function setValueId($valueId);
    public function getValueId();
    public function afterLoad($object);
    public function beforeSave($object);
    public function afterSave($object);
    public function beforeDelete($object);
    public function afterDelete($object);
    public function getEntityValueId($entity);
    public function setEntityValidId($entity, $valueId);
?>

Все эти методы реализованы в абстрактной бэкэнд-модели Mage_Eav_Model_Entity_Attribute_Backend_Abstract. Для пользовательских бэкэнд-моделей необходимо переопределить только те методы, которые требуют настройки.

Модели источников конфигурации системы

Невозможно использовать для атрибутов EAV. Исходные модели EAV реализуют метод getAllOptions, а исходные модели adminhtml реализуют метод toOptionArray ().

Исходные модели конфигурации системы по умолчанию можно найти в Mage / Adminhtml / Model / System / Config / Source /.

Модели источников атрибутов

Целью исходных моделей атрибутов является предоставление списка опций и значений для атрибутов select и multiselect. Они также поставляют информацию о столбцах в индексный индекс таблицы каталогов, если это необходимо.

Чтобы получить список всех параметров для атрибута, выполните следующие действия:

<?php
    $options = $attribute->getSource()->getAllOptions(false);

    // or for admin
    $options = $_attribute->getSource()->getAllOptions(true, true);
?>

Модели атрибутов по умолчанию

Если ни один класс не указан как интерфейс, бэкэнд или - для выбора или мультиселективных атрибутов - исходные модели, используется класс по умолчанию.

По умолчанию используется внешний интерфейс атрибута Mage_Eav_Model_Entity_Attribute_Frontend_Default.

Базовая модель атрибута по умолчанию зависит от кода атрибута и определяется в методе Mage_Eav_Model_Entity_Attribute :: _ getDefaultBackendModel ().

<?php
    protected function _getDefaultBackendModel()
    {
        switch ($this->getAttributeCode()) {
            case 'created_at':
                return 'eav/entity_attribute_backend_time_created';

            case 'updated_at':
                return 'eav/entity_attribute_backend_time_updated';

            case 'store_id':
                return 'eav/entity_attribute_backend_store';

            case 'increment_id':
                return 'eav/entity_attribute_backend_increment';
        }

        return parent::_getDefaultBackendModel();
    }
?>

Если метод проходит до последней строки, используется Mage_Eav_Model_Entity_Attribute_Backend_Default.

Исходная модель по умолчанию установлена ​​в Mage_Eav_Model_Entity_Attribute_Source_Table. Это задано в модели атрибутов модулей каталога. Модель источника конфигурации по умолчанию, указанная в модуле eav, никогда не используется.

Добавить атрибут

Чтобы добавить атрибуты EAV, используйте Mage_Eav_Model_Entity_Setup, расширившись в классе установки.

addAttribute () Создает атрибуты, добавляет их к группам и наборам (включая по умолчанию) или обновляет, если он уже существует. updateAttribute () Обновляет только данные атрибута. Пользовательские классы настройки могут использоваться для расширения этих методов, добавления дополнительных данных или упрощения необходимых аргументов.

Плоские таблицы

Атрибуты плоского каталога управляются индексаторами:

Mage_Catalog_Model_Resource_Product_Flat_Indexer :: updateAttribute () Mage_Catalog_Model_Resource_Category_Flat :: synchronize () Атрибуты продукта добавляются в плоскую таблицу, если они есть (см. Mage_Catalog_Model_Resource_Product_Flat_Indexer :: getAttributeCodes ()):

Статический (бэкэнд-тип) Фильтрация Используется в списке продуктов Используется для промо-правил Используется для сортировки по атрибутам системы. Для каждого магазина существует другая плоская таблица, каждая из которых содержит другое значение атрибута сущности объекта хранения. Многоязычные значения управляются за счет наличия разных магазинов для каждого языка.

реализовать интерфейс интерфейсов frontend, source и backend

Интерфейс интерфейса

/**
* Entity attribute frontend interface
*
* Frontend is providing the user interface for the attribute
*
*/
interface Mage_Eav_Model_Entity_Attribute_Frontend_Interface
{

}

Интерфейс источника

/**
* Entity attribute select source interface
*
* Source is providing the selection options for user interface
*
*/
interface Mage_Eav_Model_Entity_Attribute_Source_Interface
{
/**
* Retrieve All options
*
* @return array
*/
public function getAllOptions();

/**
* Retrieve Option value text
*
* @param string $value
* @return mixed
*/
public function getOptionText($value);
}

Интерфейс Backend

/**
* Entity attribute backend interface
*
* Backend is responsible for saving the values of the attribute
* and performing pre and post actions
*
*/
interface Mage_Eav_Model_Entity_Attribute_Backend_Interface
{
public function getTable();
public function isStatic();
public function getType();
public function getEntityIdField();
public function setValueId($valueId);
public function getValueId();
public function afterLoad($object);
public function beforeSave($object);
public function afterSave($object);
public function beforeDelete($object);
public function afterDelete($object);

/**
* Get entity value id
*
* @param Varien_Object $entity
*/
public function getEntityValueId($entity);

/**
* Set entity value id
*
* @param Varien_Object $entity
* @param int $valueId
*/
public function setEntityValueId($entity, $valueId);
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow