Использование для CATALOG_PRODUCT_INDEX_EAV для пользовательского атрибута и AddattributeToFilter

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

Вопрос

Я добавил атрибут:

$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,
));

Как вы можете видеть, я использовал пользовательский источник, чтобы заполнить поле Multi Select. Сохранение и загрузка значений работает как очарование.

Фильтрация коллекции может быть выполнена с помощью: $ collection-> addattributeToFilter ('show_in_subview', array ('finset' => mage :: app ()-> getStore ()-> getCurrentSubviewId ()));

Проблема в том, что коллекция не использует индексы, поскольку тип столбца не установлен (http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_find-in-set).

Я заметил, что при добавлении нормального многопользового поля запрос представляет собой соединение в таблице Catalog_product_index_eav, которая использует индексы и, следовательно, будет более эффективным.

Я не совсем уверен, куда поиск, чтобы использовать эту таблицу. Я предполагаю, что класс бэкэнд отвечает за это (это была единственная разница между раскрывающимся полем, созданным вручную, или вышеупомянутым). Таким образом, EAV/ENTITY_ATTRIBUTE_BACKEND_ARRAY не использует таблицу CATALOG_PRODUCT_INDEX_EAV.

  • Что такое бэкэнд по умолчанию, который используется для многосекционной линии или нет?
  • Как я могу расширить eav/entity_attribute_backend_array, чтобы он использовал таблицу Catalog_product_index_eav?
Это было полезно?

Решение

В конце я использовал многопользовательский атрибут по умолчанию. С помощью этого решения мы упускаем немного гибкости, но, поскольку подвесития не меняются, часто это не проблема.

  • Атрибут по умолчанию использует индексы, которые быстро
  • Атрибут по умолчанию совместим с бэкэнд Solr
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top