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
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:
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
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)
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.
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
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.