Attribut backend_type = statique?

23

Quelqu'un peut-il expliquer l’importance / la pertinence du backend_type statique pour un attribut?

J'ai des problèmes avec un attribut qui n'est pas chargé et je me demande si cela backend_typea quelque chose à voir avec cela?

En outre, est-ce lié d'une manière ou d'une autre à ce qui est mis dans les tables plates?

Marty Wallace
la source

Réponses:

37

Attributs statiques sont des attributs stockés dans le tableau principal d'une entité - pour les produits de catalogue, catalog_product_entity. Par exemple, l'attributsku des produits de catalogue est défini comme static. Les attributs statiques sont toujours chargés par Magento et sont utiles surtout si vous souhaitez récupérer rapidement des informations ou optimiser la recherche de données. Un inconvénient de ce type d'attributs est que vous ne pouvez pas avoir de valeurs spécifiques au magasin, ce qui est l'un des avantages du système Magento EAV.

Même si vous définissez un attribut comme static, Magento ne le traitera pas comme tel, sauf si vous avez une colonne correspondante dans la table d'entités principale. Si la colonne n'est pas là, Magento traite l'attribut comme varcharpar défaut et le recherche dans la table varchar EAV pour le modèle - pour les produits,catalog_product_entity_varchar .

Si vous souhaitez utiliser des attributs statiques dans votre projet, vous devez faire 2 choses dans vos scripts d'installation / mise à niveau. Tout d'abord, vous devez ajouter une colonne à la table d'entités principale, avec la définition de colonne correcte. Ensuite, vous devez installer votre attribut à l'aide de la addAttribute()méthode et définir votre attribut comme static. Veuillez vous référer aux scripts d'installation de Mage_Catalogpour mieux comprendre comment les choses fonctionnent dans ce cas.

Si vous prévoyez d'exécuter souvent des requêtes en fonction de vos attributs statiques personnalisés, pensez à ajouter un index sur la nouvelle colonne pour accélérer la récupération des données.

fmrng
la source
1
category_ids est statique. ce n'est pas dans la table catalog_product_entity_varchar.
ahnbizcad
résumé: statique signifie que la valeur est une colonne catalog_product_entity, et si ce n'est pas le cas, elle reviendra à l'archivage catalog_product_entity_varchar.
ahnbizcad
1

Voici l'exemple du noyau:

$installer->run("
    ALTER TABLE `{$installer->getTable('catalog/product')}` ADD `has_options` SMALLINT(1) NOT NULL DEFAULT '0';
");

$installer->addAttribute('catalog_product', 'has_options', array(
    'type' => 'static',
    'visible'=>false,
    'default' => false
));
Roman Snitko
la source
1
Qu'est-ce que cela a à voir avec la question?
Marius
@Marius, ce n'est qu'un exemple de la façon d'ajouter un attribut statique.
Roman Snitko
Supposons que vous ajoutez la colonne directement à la base de données via MySQL. Comment pouvez-vous changer le TYPE d'un attribut de produit existant en STATIC? Question: pourrions-nous simplement mettre à jour type = statique dans une certaine table et cela fonctionnerait?
snh_nl