Je me suis toujours demandé quelle est la signification des tableaux:
eav_entity
eav_entity_datetime
eav_entity_decimal
eav_entity_int
eav_entity_store
eav_entity_text
Ils sont toujours vides. Ils sont créés dans les versions antérieures à 1.6 app/code/core/Mage/Eav/sql/eav_setup/mysql4-install-0.7.0.php
et plus tard, ils ont été transportés dans le script d'installation pour les versions 1.6+. /app/code/core/Mage/Eav/sql/eav_setup/install-1.6.0.0.php
J'ai vu qu'il existe un modèle de ressource lié à l'une des tables Mage_Eav_Model_Resource_Entity_Store
(il y en a peut-être d'autres) mais il ne se passe rien avec / avec.
Y a-t-il une utilité à ces tables ou s'agit-il d'une autre "fonctionnalité" qui a été démarrée et non implémentée comme la version de mise en page ou le fil d'Ariane par exemple.
Réponses:
Je suppose que c'est en partie hérité et un modèle de «commodité» pour les développeurs d'implémenter des entités / modèles «génériques».
Comme vous l'avez dit, les tableaux associés sont généralement vides. La raison en est qu'aucune des principales entités EAV n'utilise cette structure de table d'entités "par défaut". Ce sont les tables d'entités d'une installation 1.8:
En utilisant le modèle Client comme exemple, nous pouvons voir que le modèle de ressource
Mage_Customer_Model_Resource_Customer
s'étendMage_Eav_Model_Entity_Abstract
, Source .Remarque : Avant la version 1.6, le modèle de ressource de l'entité cliente était
Mage_Customer_Model_Entity_Customer
également étenduMage_Eav_Model_Entity_Abstract
, Source .Si nous examinons la
Mage_Eav_Model_Entity_Abstract
classe, nous trouvons unegetEntityTable
méthode. Cette méthode est utilisée pour déterminer la table à utiliser lors de la génération de requêtes lors des opérations CRUD courantes. Une autre méthode intéressante estgetValueTablePrefix
. Il détermine le préfixe pour les tables de données tables « de type »,*_datetime
,*_decimal
,*_varchar
et ainsi de suite.Jetez un œil à la source de ces méthodes ( ici et ici ).
Dans la méthode ci-dessus, nous pouvons voir que si le type d'entité ne définit pas de table personnalisée, il est par défaut
Mage_Eav_Model_Entity::DEFAULT_ENTITY_TABLE
. La valeur de cette constante est'eav/entity'
, qui à son tour est transformée eneav_entity
table (en supposant qu'il n'y a pas de préfixe de table configuré dans l'application). La deuxième méthode que j'ai mentionnée retombe sur cette table en tant que préfixe si aucune n'a été configurée pour l'entité donnée. Si vous examinez les valeurs dueav_entity_type
tableau de lavalue_table_prefix
colonne, vous remarquerez qu'elles sont toutesNULL
.La logique de la méthode est plutôt simple, si aucun préfixe de valeur n'est défini, utilisez le nom de la table d'entités comme préfixe.
Je suppose que depuis que ces tables sont dans Magento depuis si longtemps, il est préférable de les laisser pour une compatibilité descendante plutôt que de les supprimer purement et simplement. L'idée que je pensais qu'ils cherchaient était une structure d'entité / modèle facile à utiliser que d'autres développeurs pourraient simplement étendre quelques classes et avoir ces attributs "dynamiques" qui pouvaient être modifiés via l'administrateur (voir les produits du catalogue et les modèles client). Malheureusement, la mise en œuvre et la pratique de ce modèle ne semblent pas bien évoluer et entraînent des problèmes. Je n'ai jamais vu cette structure utilisée dans la nature, probablement en raison du manque de documentation et d'exemples d'utilisation ou de mauvaises performances.
Je ne suis pas développeur principal (ou archéologue) mais c'est ce que je comprends du code et des structures de données, j'espère que cela aidera à faire la lumière.
la source
Considérez ce morceau de code dans le modèle de ressource EAV de base.
Cette méthode récupère le nom de la table d'entités de base à utiliser pour le stockage. Ainsi, pour le modèle de ressource d'un produit, cette méthode retournera
catalog_product_entity
(en supposant qu'aucun préfixe de nom de table n'a été défini)Ces quatre lignes sont les plus révélatrices.
Si l'entité n'a pas de table, la constante suivante est utilisée
Cette
eav/entity
chaîne est ensuite utilisée pour rechercher un nom de tableQui arrache le nom de la table de la config.
Ah ha! Si un type d'entité eav n'a pas de nom de table défini, Magento utilisera les
eav_entity
tables comme emplacement de stockage par défaut.L'équipe d'ingénieurs Magento d'origine était séduite par le concept EAV - tandis que Magento moderne a réduit ce niveau, les modèles EAV étaient la solution préférée pour de nombreux problèmes.
Il semble raisonnable de supposer / spéculer que l'implémentation EAV préliminaire initiale a stocké toutes les données dans cette
eav_entity
table de types centrale (un modèle courant dans les plates-formes d'entreprise), et les types d'entités sont arrivés plus tard.Une autre possibilité (convaincante) est que cette fonctionnalité était destinée à activer les modèles CRUD "sans table". En théorie, il serait possible d'insérer les informations de type EAV correctes, de configurer vos classes de modèle / ressource / collection et d'avoir des données stockées dans ces
eav_entity
tables. L'éloignement de Magento de l'EAV, et l'accent mis après le lancement sur l'équipe d'ingénierie sur les fonctionnalités de l'utilisateur final ont fait que cette fonctionnalité s'estompe dans la brume. Bien que je serais curieux de savoir si cela fonctionne, je ne voudrais pas m'y fier car ce n'est pas un chemin de code qui a reçu beaucoup d'attention, et il est douteux que le TAF couvre son utilisation.la source
Magento utilise un modèle de données appelé "Entity Attribute Value" pour de nombreuses fonctions (clients, produits, etc.). C'est ce qui permet des attributs dynamiques dans le système sans avoir à restructurer et modifier les tables à la volée. EAV sur Wikipédia
la source