L'utilisation de catalog_product_index_eav pour l'attribut personnalisé et addAttributeToFilter

magento.stackexchange https://magento.stackexchange.com/questions/5862

Question

J'ai ajouté un attribut:

$installer->addAttribute(Mage_Catalog_Model_Product::ENTITY, 'show_in_subview', array(
    'type'                       => 'varchar',
    'label'                      => 'Show in Subview',
    'input'                      => 'multiselect',
    'backend'                    => 'eav/entity_attribute_backend_array',
    'required'                   => 0,
    'user_defined'               => 0,
    'visible'                    => 1,
    'is_filterable'              => 1,
    'is_configurable'            => 0,
    'sort_order'                 => 14,
    'source'                     => 'ho_subviews/attribute_source_subview',
    'global'                     => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
    'group'                      => 'General',
    'used_in_product_listing'    => true,
));

Comme vous pouvez le voir, je l'ai utilisé une source personnalisée pour remplir le champ de sélection multiples. Enregistrement et chargement des valeurs fonctionne comme un charme.

Filtrage de la collection peut être fait en utilisant: $ Collection-> addAttributeToFilter ( 'show_in_subview', array ( 'finset' => Mage :: app () -> getStore () -> getCurrentSubviewId ()));

Le problème est que la collection ne pas utiliser les index car le type de colonne n'est pas SET ( http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_find-in-set ).

J'ai remarqué que lors de l'ajout d'un champ multi-sélection normale, la requête est une jointure sur la table catalog_product_index_eav qui ne index d'utilisation et sera donc plus performant.

Je ne suis pas sûr où chercher à utiliser ce tableau ainsi. Je devine que la classe backend est responsable de ce (qui était la seule différence entre une baisse créée manuellement vers le bas ou champ ci-dessus). Alors EAV / entity_attribute_backend_array ne pas utiliser la table catalog_product_index_eav.

  • Quel est le back-end par défaut qui est utilisé pour multiselect ou n'y est?
  • Comment puis-je prolonger EAV / entity_attribute_backend_array il utilise la table catalog_product_index_eav?
Était-ce utile?

La solution

At the end I used a default multi-select attribute. With that solution we miss a bit of flexibility, but since the subviews don't change thát often it isn't a problem.

  • The default attribute uses indexes, which is fast
  • The default attribute is compatible with the SOLR backend
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top