Recherche…


Remarques

Entité

Stocke des informations sur le type des données stockées. Dans le cas de Magento, il s’agit du client, du produit, de la catégorie, etc.

Attribut

Les propriétés individuelles de chacune des entités, par exemple le nom, le poids, l'adresse e-mail, etc.

Valeur

La valeur d'une entité et d'un attribut donnés. Par exemple, nous pouvons spécifier l'entité client et l'attribut email, puis lui donner la valeur [email protected].

Schéma de base de données

eav_entity

La table d'entités.

eav_entity_attribute

La table attributaire

eav_entity_ {type}

Les tables de valeurs. Les types sont datetime, decimals, int, text et varchar.

Important: notez que la table eav_entity_varchar a le type varchar pour les valeurs même si la date ou le nombre entier convient mieux à la valeur.

Modèles versus modèles de ressources

Tous les modèles de Mage / Eav / Model / Resource sont Mysql4 et sont des modèles de ressources.

En outre Entity / Abstract.php et Entity / Setup.php.

Plat Versus EAV

Les modèles EAV sont plus complexes, fournissant une logique pour enregistrer et charger à partir de plusieurs tables, tandis que les modèles plats ou standard sont relativement simples (traditionnels).

Les modèles standard gèrent principalement leurs propriétés avec les régleurs de données et les getters travaillant avec une seule table. Les modèles EAV gèrent principalement leurs modèles d'attributs. Les modèles standard n'enregistrent que leurs données dans un tableau et les chargent. Les modèles EAV chargent tous les attributs (ou un ensemble spécifique) après avoir chargé les données de base et sauvegardé les attributs après avoir enregistré les données (y compris l’insertion, la mise à jour et la suppression des attributs).

Exemples de modèles de ressources EAV

Pour rechercher des entités à l'aide du schéma de stockage EAV, la recherche de la chaîne extend permet d'utiliser Mage_Eav_Model_Entity_Abstract. Cela devrait révéler tous les modèles de ressources basés sur la structure EAV. Cependant, la liste résultante inclura de nombreuses classes obsolètes du module Mage_Sales qui ne sont plus utilisées.

Les seuls modules contenant des entités utilisant le schéma de stockage EAV sont Mage_Catalog (catégories et produits) et Mage_Customer (clients et adresses).

Les groupes de clients utilisent le schéma de stockage de table plate. Toutes les entités de vente ont été converties en entités de table plate avec la sortie de Magento 1.4.

La raison pour laquelle EAV est utilisé est que les entités peuvent avoir un nombre indéterminé de propriétés et donc rester flexibles. Par exemple, lorsque vous ajoutez un nouvel attribut à une entité client (qui est une entité EAV), il n'est pas nécessaire de modifier la table de base de données pour que ce nouvel attribut soit ajouté.

Avantages

Le schéma de flexibilité de la base de données n'a pas besoin de changer avec le modèle Mise en œuvre rapide

Désavantages

  • Inefficace

Une requête renvoyant 20 colonnes serait normalement composée de 20 auto-jointures dans EAV. Cependant, le module Mage_Eav n'utilise généralement pas de jointure pour charger les données de valeur d'attribut. Au lieu de cela, les sélections d'union sont utilisées. Les jointures ne sont utilisées que pour filtrer les collections EAV.

  • Aucun mécanisme pour les relations entre les sous-types
  • Pas de regroupement des sous-types d'entité

Portée du site et du magasin

Pour gérer les valeurs d'attribut de site Web et d'étendue de magasin dans EAV, une valeur store_id existe sur l'entité de catalogue afin d'afficher l'étendue qui renvoie à core_store. En plus des magasins normaux (vues de magasin), il existe également un magasin «0» qui correspond à la valeur globale. Sur un magasin particulier, le système vérifie d'abord une valeur d'entité sur le magasin actuel, puis se rabat sur l'entité globale. Les entités EAV Mage_Customer n'ont pas de colonne de portée store_id.

Insérer, mettre à jour et supprimer

Pour déterminer si une insertion, une mise à jour ou une suppression doit être effectuée sur un attribut, une comparaison est effectuée avec l'objet d'origine. L'objet d'origine est essentiellement un doublon de l'objet de données lorsque l'entité a été extraite de la base de données.

  • Si l'attribut existe à l'origine et que sa nouvelle valeur n'est pas vide; il met à jour
  • Si l'attribut existe à l'origine, sa nouvelle valeur est définie sur vide; ça supprime. - Si l'attribut n'existe pas à l'origine et que sa nouvelle valeur n'est pas vide; il insère

Gestion des attributs

Modèles d'attribut

Modèle d'attribut Représente l'attribut dans le formulaire de base de données, sa logique est standard pour tous les attributs et est difficile à modifier .

Modèle frontend

L'interface de l'attribut à l'interface et fournit toute logique requise par l'attribut sur l'interface, par exemple la méthode getUrl () sur les images.

Modèle de backend

Celles-ci effectuent la validation sur l'attribut avant qu'il soit enregistré dans la base de données. Par exemple, le modèle de mot de passe de mot de passe convertit le mot de passe en un hachage avant qu'il soit enregistré. Il vérifie également que le mot de passe et la confirmation du mot de passe correspondent avant l'enregistrement.

Modèles source

Utilisé pour remplir les options disponibles pour un attribut, par exemple catalog / product_status a activé et désactivé.

Méthodes requises

Un modèle source nécessite:

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

Normalement, seul getAllOptions () doit être implémenté car une implémentation de getOptionText () existe déjà dans le modèle source abstrait Mage_Eav_Model_Entity_Attribute_Source_Abstract.

Un modèle frontal ne nécessite pas la méthode getValue ().

Un modèle backend nécessite:

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

Toutes ces méthodes sont implémentées dans le modèle backend abstrait Mage_Eav_Model_Entity_Attribute_Backend_Abstract. Pour les modèles de gestion personnalisés, seules les méthodes nécessitant une personnalisation doivent être remplacées.

Modèles source de configuration système

Ne peut pas être utilisé pour les attributs EAV. Les modèles de source EAV implémentent la méthode getAllOptions, tandis que les modèles source adminhtml implémentent la méthode toOptionArray ().

Les modèles de source de configuration système par défaut peuvent être trouvés dans Mage / Adminhtml / Model / System / Config / Source /.

Modèles source d'attribut

Le but des modèles de source d'attribut est de fournir la liste des options et des valeurs pour les attributs select et multiselect. Ils fournissent également les informations de colonne à l'indexeur de table plate du catalogue si nécessaire.

Pour obtenir une liste de toutes les options pour un attribut, procédez comme suit:

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

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

Modèles d'attributs par défaut

Si aucune classe n'est spécifiée en tant que frontend, backend ou - pour les attributs select ou multiselect - pour les modèles source, une classe par défaut est utilisée.

Le modèle frontal d'attribut par défaut est Mage_Eav_Model_Entity_Attribute_Frontend_Default.

Le modèle principal d'attribut par défaut dépend du code d'attribut et est déterminé dans la méthode 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 la méthode passe à la dernière ligne, Mage_Eav_Model_Entity_Attribute_Backend_Default est utilisé.

Le modèle source par défaut est défini dans Mage_Eav_Model_Entity_Attribute_Source_Table. Ceci est défini dans le modèle d'attribut des modules de catalogue. Le modèle source de configuration par défaut spécifié dans le module eav n'est jamais utilisé.

Ajouter un attribut

Pour ajouter des attributs EAV, utilisez Mage_Eav_Model_Entity_Setup en étendant la classe setup.

addAttribute () Crée les attributs, les ajoute aux groupes et aux ensembles (y compris les paramètres par défaut), ou les met à jour s'il existe déjà. updateAttribute () Met à jour les données d'attribut uniquement. Des classes d'installation personnalisées peuvent être utilisées pour étendre ces méthodes, ajouter des données supplémentaires ou simplifier les arguments nécessaires.

Tables plates

Les attributs de catalogue plat sont gérés par des indexeurs:

Mage_Catalog_Model_Resource_Product_Flat_Indexer :: updateAttribute () Mage_Catalog_Model_Resource_Category_Flat :: synchronize () Les attributs de produit sont ajoutés à la table plate s'ils existent (voir Mage_Catalog_Model_Resource_Product_Flat_Indexer :: getAttributeCodes ()):

Statique (type dorsal) Filtrable Utilisé dans la liste de produits Utilisé pour les règles de promotion Utilisé pour le tri selon les attributs du système Il existe une table plate différente pour chaque magasin, chacun contenant une valeur d'attribut d'entité différente. Les valeurs multilingues sont gérées en ayant différents magasins pour chaque langue.

implémenter l'interface des modèles frontend, source et backend d'attribut

Interface Frontend

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

}

Interface source

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

Interface 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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow