Atrybut backend_type = statyczny?

23

Czy ktoś może wyjaśnić znaczenie / istotność backend_type statycznego atrybutu?

Mam pewne problemy z brakiem ładowania atrybutu i zastanawiam się, czy to backend_typema coś z tym wspólnego?

Czy jest to również w jakiś sposób powiązane z tym, co znajduje się na płaskich stołach?

Marty Wallace
źródło

Odpowiedzi:

37

Atrybuty statyczne Atrybuty są przechowywane w głównej tabeli podmiotu - katalogowych produktów catalog_product_entity. Na przykład atrybut skuproduktów katalogu jest zdefiniowany jako static. Atrybuty statyczne są zawsze ładowane przez Magento i są przydatne, szczególnie jeśli chcesz szybko uzyskać informacje lub zoptymalizować wyszukiwanie danych. Wadą tego rodzaju atrybutów jest to, że nie można mieć wartości specyficznych dla sklepu, co jest jedną z zalet systemu Magento EAV.

Nawet jeśli zdefiniujesz atrybut jako static, Magento nie potraktuje go jako takiego, chyba że masz odpowiednią kolumnę w głównej tabeli encji. Jeśli kolumna nie ma, Magento traktuje jako atrybut varchardomyślnie i szuka go w tabeli varchar EAV dla modelu - dla produktów, catalog_product_entity_varchar.

Jeśli chcesz używać atrybutów statycznych w swoim projekcie, musisz zrobić 2 rzeczy w swoich skryptach instalacyjnych / aktualizacyjnych. Najpierw musisz dodać kolumnę do głównej tabeli encji z poprawną definicją kolumny. Następnie musisz zainstalować atrybut za pomocą addAttribute()metody i zdefiniować go jako static. Proszę zapoznać się ze skryptami instalacyjnymi, Mage_Catalogaby lepiej zrozumieć, jak działają rzeczy w tym przypadku.

Jeśli planujesz często uruchamiać zapytania w oparciu o niestandardowe atrybuty statyczne, rozważ dodanie indeksu w nowej kolumnie, aby przyspieszyć pobieranie danych.

fmrng
źródło
1
category_ids jest statyczny. nie ma go w tabeli catalog_product_entity_varchar.
ahnbizcad
Podsumowanie: statyczny oznacza, że ​​wartość jest kolumną w catalog_product_entity, a jeśli nie jest, wróci do sprawdzania w katalogu katalog_produktu_wystąpienia_warchar.
ahnbizcad
1

Oto próbka z rdzenia:

$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
źródło
1
Co to ma wspólnego z pytaniem?
Marius
@Marius to tylko próbka dodania atrybutu statycznego.
Roman Snitko,
Załóżmy, że dodajesz kolumnę bezpośrednio do bazy danych za pośrednictwem MySQL. Jak mogłeś zmienić TYP istniejącego atrybutu produktu na STATIC? Pytanie: czy moglibyśmy po prostu zaktualizować typ = statyczny w określonej tabeli i działałoby?
snh_nl