Вопрос

Для атрибута, установленного как выпадающий список, это должно быть int или varchar?

Я устанавливаю каталог продуктов, в которые кто -то импортировал, и я вижу атрибут размера, созданный как раскрывающийся int тип (backend колонка в eav_attributes), но целочисленные значения хранятся в catalog_product_entity_varchar стол. Таким образом, простые продукты думают, что у них нет размеров.

Кроме того, я подумал, что если у таблицы Varchar EAV была раскрывающиеся значения, она сохранила ее как строку, а не целое число, которое указывает на таблицу EAV. Я видел выпадающий атрибут, хранящий его значения в ..._varchar Таблица как фактические значения строк, а не число, которое обращалось к таблице атрибутов EAV, потому что она была создана как varchar во время установки расширения.

Итак, мои вопросы ..

  1. Выпадающий атрибут получает бэкэнд тип int Если создано в администраторе, но если вы создаете атрибут с помощью расширения, вы можете установить этот столбец как varchar. Анкет Имеет ли значение, если раскрывающийся атрибут является int или varchar тип?

  2. Что касается каталога, который я исправляю, я не совсем уверен, что сделал оригинальный разработчик. Он не использовал текстовый файл для импорта продуктов; Из сценариев, которые у меня есть, использовались в импорте продукта, он программно сохранил продукты с данными (т.е. $product->save()) Но как этот раскрывающийся атрибут был создан как int бэкэнд, но оказался в catalog_product_entity_varchar таблица с численными строками, которые указывают на eav_attribute_option. Анкет Я проверил эти значения "varchar" указывают на фактические записи в eav_attribute_option.

  3. Если раскрывающийся атрибут был настроен как varchar Бэкэнд тип, как Magento знает, чтобы ссылаться на параметры EAV с численными значениями варчара вместо того, чтобы просто назначать значение атрибута как «1» или «2» (как в размере 1, 2 и т. Д. Вместо небольшого, среднего и т. Д. .)? Я предполагаю, что это потому, что он был настроен как выпадающий, но просто хотел проверить.

Это было полезно?

Решение

Давайте возьмем их один за другим.

  1. Вы должны использовать int значения для последовательности. Но (как вы видели) это работает с varchar также. У меня есть догадка, с которой он работает text слишком.

  2. «Как этот выпадающий атрибут был создан как бэкэнд Int, но оказался в Catalog_product_entity_varchar». Это полная загадка. Только первоначальный разработчик может сказать вам это (возможно, даже не он). Но я могу сказать вам, как возможно ссылаться на eav_attribute_option стол. Это потому, что параметры атрибутов не заботятся о типе атрибута. Если атрибут имеет source_model это вызывает getAllOptions Из этой модели источника и соответствует значению, установленному на продукт с тем, что он находит в результате getAllOptions.

  3. Я думаю, что ответ на номер 2 также ответит на номер 3. Кроме того, это потому, что PHP является языком программирования свободного типа и 3 == "3" оценивает true.

Другие советы

В дополнение к ответу Мариуса - я не уверен в этом на 100% - я думаю, что если вы программно создаете выпадающий атрибут как тип varchar и добавить параметры, но позже вы сохраняете атрибут через Admin (Catalog -> Атрибуты -> Управление атрибутами), он изменяет тип из varchar к int. Анкет Таким образом, вы получите атрибут с типом int, но с его ценностями, фактически хранящимися в catalog_product_entity_varchar стол.

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

РЕДАКТИРОВАТЬ: Я только что проверил это, и это как я описал выше. Если вы сохраните атрибут с input в качестве select Через администратор это изменит type к int, даже если это было varchar до. По какой -то причине все этикетки/параметры все еще работают, но фильтрация перестает работать, потому что она смотрит не в неправильной таблице для значений.

Я столкнулся с той же проблемой с пользовательским модулем импорта. Атрибуты были созданы с выпадающим и бэкэнд типом 'varchar'. Продукты были настроены отлично в бэкэнде, но не отображались на фронтальных категориях.

Это сработало только тогда, когда мы переехали импорт, а атрибуты имеют бэкэнд типа «int». Теперь продукты отображаются нормально, а значения атрибутов отображаются в таблице '_int'.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top