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?

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.


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.