Атрибут backend_type = static?

23

Может кто-нибудь объяснить важность / актуальность backend_type статики для атрибута?

У меня проблемы с атрибутом, который не загружается, и мне интересно, как это backend_typeсвязано с этим?

Кроме того, это как-то связано с тем, что помещено в плоские столы?

Марти Уоллес
источник

Ответы:

37

Статические атрибуты - это атрибуты, хранящиеся в основной таблице сущности - для продуктов каталога catalog_product_entity. Например, атрибут skuкаталога товаров определяется как static. Статические атрибуты всегда загружаются Magento и полезны, особенно если вы хотите быстро получить информацию или оптимизировать поиск данных. Недостатком этого типа атрибутов является то, что вы не можете иметь специфичные для магазина значения, что является одним из преимуществ системы Magento EAV.

Даже если вы определите атрибут как static, Magento не будет обрабатывать его как таковой, если у вас нет соответствующего столбца в основной таблице сущностей. Если столбец не существует, Magento обрабатывает атрибут , как varcharпо умолчанию , и выглядит для него в таблице VARCHAR EAV для модели - для продуктов, catalog_product_entity_varchar.

Если вы хотите использовать статические атрибуты в своем проекте, вы должны сделать 2 вещи в ваших скриптах установки / обновления. Во-первых, вам нужно добавить столбец в основную таблицу сущностей с правильным определением столбца. Затем вам нужно установить свой атрибут с помощью addAttribute()метода и определить свой атрибут как static. Пожалуйста, обратитесь к установочным скриптам, Mage_Catalogчтобы лучше понять, как все работает в этом случае.

Если вы планируете часто выполнять запросы на основе пользовательских статических атрибутов, рассмотрите возможность добавления индекса в новый столбец, чтобы ускорить выборку данных.

fmrng
источник
1
category_ids является статическим. его нет в таблице catalog_product_entity_varchar.
ahnbizcad
Summary: static означает, что значение является столбцом catalog_product_entity, и если это не так, оно вернется к проверке в catalog_product_entity_varchar.
ahnbizcad
1

Вот образец из ядра:

$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
));
Роман Снитко
источник
1
Какое это имеет отношение к вопросу?
Мариус
@Marius это просто пример того, как добавить статический атрибут.
Роман Снитко
Предположим, вы добавили столбец непосредственно в БД через MySQL. Как вы могли бы изменить ТИП существующего атрибута продукта на STATIC? Вопрос: можем ли мы просто обновить type = static в определенной таблице, и это будет работать?
snh_nl