web-dev-qa-db-fra.com

Comment les attributs de produit et les options d'attribut sont-ils stockés dans la base de données Magento?

J'essaie de comprendre comment le lien entre l'attribut et les options d'attribut, et le produit et les attributs sont créés dans Magento. Y a-t-il une référence à la façon dont cela fonctionne? ou quelqu'un me donne un indice à ce sujet.

Merci,

Balan

31
balanv

Comme le dit Alan Storm: "vous n'avez pas besoin de savoir comment fonctionne votre db. Vous devez apprendre comment fonctionnent les modèles". (Ce n'est pas une citation exacte. Je vous en ai donné le sens).

Mais j'ai créé mon propre schéma pour comprendre la structure DB. Cet écran montre donc comment cela fonctionne: enter image description hereenter image description here

J'espère que ça aide.

Je vous recommande également de parcourir ces liens:

http://www.magentocommerce.com/wiki/2_-_magento_concepts_and_architecture/magento_database_diagram

http://alanstorm.com/magento_advanced_orm_entity_attribute_value_part_1

57
Anthony

1) Les attributs sont stockés dans eav_attribute. Là, vous obtenez le attribute_id.

2) Les options sont stockées dans eav_attribute_option_value. Là, vous obtenez le option_id.

3) Les options sont affectées au produit dans catalog_product_entity_varchar. Là, vous avez besoin du entity_id du produit, le attribute_id de 1) et la valeur qui sont séparés par des virgules option_ids à partir de 2)

35
Waschbär

J'ai trouvé ces requêtes très utiles pour traquer des choses comme - où est-il dit que la couleur du produit est noire?, Par exemple.

-- show_product_attr.sql
select
   p.entity_id,
   p.entity_type_id,
   p.attribute_set_id,
   p.type_id,
   p.sku,
   a.attribute_id,
   a.frontend_label as attribute,
   av.value
from
   catalog_product_entity p
   left join catalog_product_entity_{datatype} av on
      p.entity_id = av.entity_id
   left join eav_attribute a on
      av.attribute_id = a.attribute_id
where
   -- p.entity_id = 28683
   -- p.sku = '0452MR'
   p.entity_id = {eid}
;

Et pour attr_options

-- show_product_attr_options.sql
select
   p.entity_id,
   -- p.entity_type_id,
   -- p.attribute_set_id,
   p.type_id,
   p.sku,
   a.attribute_id,
   a.frontend_label as attribute,
   -- a.attribute_code,
   av.value,
   ao.*
from
   catalog_product_entity p

   left join catalog_product_entity_int av on
      p.entity_id = av.entity_id

   left join eav_attribute a on
      av.attribute_id = a.attribute_id
   left join eav_attribute_option_value ao on
      av.value = ao.option_id 
where
   -- p.entity_id = 28683
   p.entity_id = {eid}
;

Vous devez remplacer {datatype} par du texte, varchar, int, décimal, etc., pour la première requête, et {eid} par entity_id pour les deux requêtes. Ce que vous pouvez faire sur la commande comme ceci:

$ cat show_product_attr_options.sql | sed -e "s/{eid}/30445/" | mysql -uUSER -pPASS DATABASE -t
+-----------+---------+--------------+--------------+---------------------------+-------+----------+-----------+----------+--------------------+-------------+
| entity_id | type_id | sku          | attribute_id | attribute                 | value | value_id | option_id | store_id | value              | colorswatch |
+-----------+---------+--------------+--------------+---------------------------+-------+----------+-----------+----------+--------------------+-------------+
|     30445 | simple  | 840001179127 |           96 | Status                    |     1 |     5972 |         1 |        0 | Male               | NULL        |
|     30445 | simple  | 840001179127 |          102 | Visibility                |     1 |     5972 |         1 |        0 | Male               | NULL        |
|     30445 | simple  | 840001179127 |          122 | Tax Class                 |     2 |     5973 |         2 |        0 | Female             | NULL        |
|     30445 | simple  | 840001179127 |          217 | Size                      |   257 |    17655 |       257 |        0 | XS                 | NULL        |
|     30445 | simple  | 840001179127 |          217 | Size                      |   257 |    17657 |       257 |        1 | XS                 | NULL        |
|     30445 | simple  | 840001179127 |          224 | Color                     |   609 |    18717 |       609 |        0 | Arctic Ice Heather | NULL        |
|     30445 | simple  | 840001179127 |          260 | Featured                  |     0 |     NULL |      NULL |     NULL | NULL               | NULL        |
|     30445 | simple  | 840001179127 |          262 | Clearance Product         |     0 |     NULL |      NULL |     NULL | NULL               | NULL        |
|     30445 | simple  | 840001179127 |          263 | Skip from Being Submitted |     0 |     NULL |      NULL |     NULL | NULL               | NULL        |
|     30445 | simple  | 840001179127 |          283 | Discontinued              |     0 |     NULL |      NULL |     NULL | NULL               | NULL        |
+-----------+---------+--------------+--------------+---------------------------+-------+----------+-----------+----------+--------------------+-------------+

Un ensemble similaire de scripts SQL peut être créé pour le catalogue.

4
dlink

Les attributs de produit sont des valeurs supplémentaires que vous pouvez attribuer à un produit et sont stockés dans la table EAV principale, par nom, et les données sont ensuite stockées dans quelques tables différentes en fonction du type de données, comme varchar, décimal, texte Integer, date , etc.

si vous aviez plusieurs valeurs pour votre attribut de produit, celles-ci seront stockées dans les tables d'options d'attribut, encore une fois, différentes tables en fonction du type de données.

le lien suivant explique mieux les relations: http://www.magentocommerce.com/wiki/2_-_magento_concepts_and_architecture/magento_database_diagram

Et les détails du développeur plus profond: http://www.magentocommerce.com/knowledge-base/entry/magento-for-dev-part-7-advanced-orm-entity-attribute-value

Et les ensembles d'attributs seront l'autre chose que vous rencontrerez, comme son nom l'indique, un ensemble d'attributs regroupés. http://www.magentocommerce.com/knowledge-base/entry/how-do-i-create-an-attribute-set

HTH Shaun

3
ShaunOReilly
SELECT pei.value 
FROM `catalog_product_entity_int` pei 
JOIN `eav_attribute` ea 
ON pei.attribute_id = ea .attribute_id 
WHERE pei.entity_id = {your product_id} 
AND ea.attribute_code = '{your attribute_code}'

Notez qu'il existe un certain nombre de tables différentes comme catalog_product_entity_int selon le type de l'attribut, donc l'une de ces autres pourrait être appropriée.

3
colmde