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.
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));
@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?
catalog_product_entity
, a jeśli nie jest, wróci do sprawdzania w katalogu katalog_produktu_wystąpienia_warchar.Oto próbka z rdzenia:
źródło