Образцы исчезают
В таблице eav_attribute_option_swatch
(той, в которой содержатся параметры образца для атрибутов) У меня около 6 тысяч записей.
Некоторые из них являются цветовыми кодами, другие - путями к изображениям, и большинство из них имеют значение null (в столбце значение).
Но что-то, где-то, когда-то, каким-то образом удаляет их, и я не знаю, что, где, когда и как.
Это один момент, когда я случайно понимаю, что во внешнем интерфейсе настраиваемые продукты больше не показывают образцы, и я вижу обычный раскрывающийся список с опции.
Стол не полностью очищен. До сих пор, когда это произошло, оставалось где-то от 1 до 10 записей. Я не мог найти в них ничего особенного, кроме одного. Всегда есть запись с option_id
= 0. (не уверен, что это уместно).
Главная проблема не в том, что это происходит. Проблема в том, что я не могу его воспроизвести.
Что я пробовал до сих пор:
- Сохраните случайные атрибуты, у которых есть или нет образцов.
- Сохраненный атрибут с наибольшим количеством опций (2k+). Я подумал, что это может быть как-то связано с максимальным размером записи или максимальными входными значениями. Это работает, как и ожидалось.
- Удалите один атрибут.
- Удалить один вариант
- Удалите и добавьте образец одновременно.
- Изменил тип атрибута с образца на что-то другое.
- ... и вернемся к образцу
- Бьюсь головой об стол.
Ничто из вышеперечисленного не помогло (особенно последнее).
Я не ищу полное решение, хотя это было бы здорово.
Мне нужны другие примеры (код или действия), которые могут касаться таблицы eav_attribute_option_swatch
.
Примечание:
У меня действительно установлены некоторые сторонние расширения и еще несколько, которые были разработаны внутри компании. Но я просто ищу здесь идеи.
2 answers
Если вы впадаете в отчаяние, что-то вроде этого
#!/bin/bash
USER=root
PASS=pass
DB=db
LOWRECORDS=100
LOG="/var/log/mysql/general.log"
if [ -e "iamdone" ]; then
exit 0
fi
COUNT=`mysql -u $USER --password=$PASS -D $DB -N -s -e "SELECT count(*) from eav_attribute_option_swatch;"`
if [[ $COUNT -gt $LOWRECORDS ]]; then
mv "${LOG}" "${LOG}.tmp"
mysqladmin -u $USER --password=$PASS flush-logs
rm "${LOG}.tmp"
else
`mysql -u $USER --password=$PASS -D $DB -N -s -e "SET GLOBAL general_log = 'OFF';"`
touch "iamdone"
echo "I am done"
fi
В вашем cron каждые 5 минут будет повторяться выход из системы, пока в таблице не будет
С помощью сообщества... проблема в том, как сообщается здесь, неправильный запрос на удаление образцов опций при изменении атрибута с образца на раскрывающийся список.
Запрос на удаление образцов строится с помощью ->where('option_id', $optionId)
вместо ->where('option_id = ?', $optionId)
.
Исправлено на данный момент с помощью плагина around
для \Magento\Swatches\Model\ResourceModel\Swatch::clearSwatchOptionByOptionIdAndType