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 les options d'attribut et d'attribut, et le produit et les attributs est fait dans Magento. Est-il référence à la façon dont cela fonctionne? ou quelqu'un me donner un indice sur cette.
Merci,
Balan
6 réponses
comme me l'a dit Alan Storm: "vous n'avez pas besoin de savoir comment fonctionne votre base de données. Vous devriez apprendre comment les modèles fonctionnent". (Ce n'est pas une citation exacte. Je vous ai donné le sens).
mais j'ai créé propre schéma pour comprendre la structure de DB. Donc cet écran montre comment cela fonctionne:
j'Espère, ça aide.
je vous recommande aussi de regarder à travers 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
. Il y yout obtenir le option_id
.
3) Les options sont attribuées au produit catalog_product_entity_varchar
. Là, vous avez besoin de la entity_id
du produit, le attribute_id
à partir de 1) et de la valeur qui sont séparées par des virgules option_ids
à partir de 2)
Chaque fois que je veux savoir quelque chose au sujet de comment magento db relations œuvres-je vérifier cette
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 différentes tables comme catalog_product_entity_int selon le type de l'attribut, donc l'une de celles les autres pourrait être approprié.
j'ai trouvé ces requêtes pour être très utile pour traquer des choses comme - Où est-il dit la couleur du produit est noir?, 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 {type} avec text, varchar, int, virgule, etc, pour la première requête, et {l'aïd} avec entity_id pour les deux requêtes. Qui 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 assigner à un produit et est stocké dans la table EAV principale, par nom, et les données sont ensuite stockées dans quelques tables différentes basées sur le type de données, comme varchar, décimal, texte entier, date, etc.
si vous aviez plusieurs valeurs pour votre Attribut produit, alors cela sera stocké dans les tables D'options D'attribut, encore une fois, différentes tables basées sur le type de données.
le lien suivant explique les relations mieux: http://www.magentocommerce.com/wiki/2_-_magento_concepts_and_architecture/magento_database_diagram
et plus de détails sur le développeur: http://www.magentocommerce.com/knowledge-base/entry/magento-for-dev-part-7-advanced-orm-entity-attribute-value
Et les ensembles d'attributs sera autre chose que vous venez à travers, 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