Buscar..


Observaciones

Entidad

Almacena información sobre el tipo de datos que se almacenan. En el caso de Magento esto es cliente, producto, categoría, etc.

Atributo

Las propiedades individuales de cada una de las entidades, por ejemplo, nombre, peso, dirección de correo electrónico, etc.

Valor

El valor de una entidad y atributo dados. Por ejemplo, podemos especificar la entidad del cliente y el atributo de correo electrónico y luego asignarle el valor [email protected].

Esquema de base de datos

eav_entity

La tabla de entidades.

eav_entity_attribute

La tabla de atributos.

eav_entity_ {type}

Las tablas de valores. Los tipos son datetime, decimals, int, text y varchar.

Es importante tener en cuenta que la tabla eav_entity_varchar tiene el tipo varchar para los valores, incluso si la fecha o el entero se ajustan mejor al valor.

Modelos Versus Modelos de Recursos

Todos los modelos dentro de Mage / Eav / Model / Resource son Mysql4 y son modelos de recurso.

Además, Entity / Abstract.php y Entity / Setup.php.

Flat Versus EAV

Los modelos EAV son más complejos y proporcionan lógica para guardar y cargar desde múltiples tablas, mientras que los modelos planos o estándar son relativamente sencillos (tradicionales).

Los modelos estándar gestionan principalmente sus propiedades con definidores de datos y captadores que trabajan con una sola tabla. Los modelos EAV gestionan principalmente sus modelos de atributos. Los modelos estándar solo guardan sus datos en una tabla y se cargan. Los modelos EAV cargan todos los atributos (o un conjunto específico) después de cargar los datos de base y guardan los atributos después de guardar los datos (incluyendo la inserción, actualización y eliminación de atributos).

Ejemplos de modelos de recursos de EAV

Para buscar entidades que utilizan el esquema de almacenamiento EAV, se puede utilizar la búsqueda de la cadena Mage_Eav_Model_Entity_Abstract. Esto debería revelar todos los modelos de recursos basados ​​en la estructura de EAV. Sin embargo, la lista resultante incluirá muchas clases obsoletas del módulo Mage_Sales que ya no se están utilizando.

Los únicos módulos que contienen entidades que utilizan el esquema de almacenamiento EAV son Mage_Catalog (categorías y productos) y Mage_Customer (clientes y direcciones).

Los grupos de clientes utilizan el esquema de almacenamiento de tabla plana. Todas las entidades de ventas se convirtieron en entidades de tabla plana con el lanzamiento de Magento 1.4.

La razón por la que se utiliza EAV es para que las entidades puedan tener un número indeterminado de propiedades y, por lo tanto, seguir siendo flexibles. Por ejemplo, cuando agrega un nuevo atributo a una entidad de Cliente (que es una entidad de EAV), no es necesario modificar la tabla de la base de datos para que se agregue este nuevo atributo.

Ventajas

Flexibilidad El esquema de la base de datos no necesita cambiarse con el modelo Rápido de implementar

Desventajas

  • Ineficiente

Una consulta que devuelve 20 columnas normalmente consistirá en 20 uniones individuales en EAV. Sin embargo, el módulo Mage_Eav generalmente no usa uniones para cargar los datos de valor de atributo. En su lugar, se utilizan las selecciones de unión. Las uniones solo se utilizan para filtrar colecciones de EAV.

  • Ningún mecanismo para las relaciones entre subtipos.
  • Sin agrupación de subtipos de entidad.

Sitio web y tienda de ámbitos

Para manejar los valores de atributo de ámbito de tienda y sitio web dentro de EAV, existe un valor de store_id en la entidad de catálogo para mostrar el alcance que enlaza de nuevo con core_store. Junto con las tiendas normales (vistas de tienda) también hay una tienda '0' que es el valor global. Cuando se encuentra en una tienda en particular, el sistema primero verificará el valor de una entidad en la tienda actual y luego volverá a la entidad global. Las entidades de EAV de Mage_Customer no tienen una columna de ámbito store_id.

Insertar, actualizar y eliminar

Para determinar si una inserción, actualización o eliminación debe realizarse en un atributo, se realiza una comparación con el objeto original. El objeto original es básicamente un duplicado del objeto de datos cuando la entidad se recuperó de la base de datos.

  • Si el atributo existe originalmente y su nuevo valor no está vacío; se actualiza.
  • Si el atributo existe originalmente pero su nuevo valor se establece en vacío; se borra. - Si el atributo no existe originalmente y su nuevo valor no está vacío; se inserta.

Gestión de atributos

Modelos de atributo

Modelo de atributo Representa el atributo en el formulario de la base de datos, su lógica es estándar en todos los atributos y es difícil de cambiar .

Modelo frontend

La interfaz del atributo a la interfaz y proporciona cualquier lógica que el atributo requiera en la interfaz, por ejemplo, el método getUrl () en las imágenes.

Modelo de backend

Estos realizan la validación en el atributo antes de que se guarde en la base de datos. Por ejemplo, el modelo de back-end de contraseña convierte la contraseña en un hash antes de que se guarde. También verifica que la contraseña y la confirmación de la contraseña coincidan antes de guardar.

Modelos de fuente

Se utiliza para rellenar las opciones disponibles para un atributo, por ejemplo, catalog / product_status se ha habilitado y deshabilitado.

Métodos requeridos

Un modelo fuente requiere:

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

Por lo general, solo se necesita implementar getAllOptions (), ya que ya existe una implementación para getOptionText () en el modelo de fuente abstracta Mage_Eav_Model_Entity_Attribute_Source_Abstract.

Un modelo de frontend no requiere el método getValue ().

Un modelo de backend requiere:

<?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);
?>

Todos estos métodos se implementan en el modelo de backend abstracto Mage_Eav_Model_Entity_Attribute_Backend_Abstract. Para modelos de back-end personalizados, solo los métodos que requieren personalización deben ser anulados.

Modelos de fuente de configuración del sistema

No se puede utilizar para los atributos de EAV. Los modelos de origen de EAV implementan el método getAllOptions mientras que los modelos de origen adminhtml implementan el método toOptionArray ().

Los modelos de fuente de configuración del sistema predeterminados se pueden encontrar en Mage / Adminhtml / Model / System / Config / Source /.

Modelos de fuente de atributos

El propósito de los modelos de fuente de atributos es proporcionar la lista de opciones y valores para los atributos de selección y selección múltiple. También suministran la información de la columna al indexador de tabla plana de catálogo, si es necesario.

Para obtener una lista de todas las opciones para un atributo, realice lo siguiente:

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

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

Modelos de atributos predeterminados

Si no se especifica ninguna clase como frontend, backend o - para los atributos de selección o selección múltiple - modelos de origen, se utiliza una clase predeterminada.

El modelo de frontend de atributo predeterminado es Mage_Eav_Model_Entity_Attribute_Frontend_Default.

El modelo de backend de atributo predeterminado depende del código de atributo y se determina en el método 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();
    }
?>

Si el método cae hasta la última línea, se utiliza Mage_Eav_Model_Entity_Attribute_Backend_Default.

El modelo de origen predeterminado se establece en Mage_Eav_Model_Entity_Attribute_Source_Table. Esto se establece en el modelo de atributo de módulos de catálogo. El modelo de fuente de configuración predeterminado especificado en el módulo eav nunca se usa.

Añadir atributo

Para agregar atributos de EAV, use Mage_Eav_Model_Entity_Setup extendiendo en la clase de configuración.

addAttribute () Crea los atributos, los agrega a grupos y conjuntos (incluido el predeterminado), o actualiza si ya existe updateAttribute () Actualiza solo los datos del atributo. Se pueden usar clases de configuración personalizada para ampliar estos métodos, agregar datos adicionales o simplificar los argumentos necesarios.

Mesas planas

Los atributos del catálogo plano son gestionados por indexadores:

Mage_Catalog_Model_Resource_Product_Flat_Indexer :: updateAttribute () Mage_Catalog_Model_Resource_Category_Flat :: synchronize () Los atributos del producto se agregan a la tabla plana si lo son (ver Mage_Catalog_Model_Resource_Product_Flat_Inplatin_Plat_Inplanta).

Estático (tipo de backend) Filtrable Se usa en la lista de productos Se usa para reglas de promoción Se usa para ordenar por atributos del sistema Hay una tabla plana diferente para cada tienda, cada una contiene un valor de atributo de entidad de ámbito de tienda diferente. Los valores multilingües se administran teniendo diferentes tiendas para cada idioma.

Implementar la interfaz de atributos de frontend, fuente y backend.

Interfaz frontal

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

}

Interfaz de fuente

/**
* 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);
}

Interfaz de 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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow