Образцы исчезают


В таблице eav_attribute_option_swatch (той, в которой содержатся параметры образца для атрибутов) У меня около 6 тысяч записей.
Некоторые из них являются цветовыми кодами, другие - путями к изображениям, и большинство из них имеют значение null (в столбце значение).
Но что-то, где-то, когда-то, каким-то образом удаляет их, и я не знаю, что, где, когда и как.
Это один момент, когда я случайно понимаю, что во внешнем интерфейсе настраиваемые продукты больше не показывают образцы, и я вижу обычный раскрывающийся список с опции.
Стол не полностью очищен. До сих пор, когда это произошло, оставалось где-то от 1 до 10 записей. Я не мог найти в них ничего особенного, кроме одного. Всегда есть запись с option_id = 0. (не уверен, что это уместно).

Главная проблема не в том, что это происходит. Проблема в том, что я не могу его воспроизвести.
Что я пробовал до сих пор:

  • Сохраните случайные атрибуты, у которых есть или нет образцов.
  • Сохраненный атрибут с наибольшим количеством опций (2k+). Я подумал, что это может быть как-то связано с максимальным размером записи или максимальными входными значениями. Это работает, как и ожидалось.
  • Удалите один атрибут.
  • Удалить один вариант
  • Удалите и добавьте образец одновременно.
  • Изменил тип атрибута с образца на что-то другое.
  • ... и вернемся к образцу
  • Бьюсь головой об стол.

Ничто из вышеперечисленного не помогло (особенно последнее).

Я не ищу полное решение, хотя это было бы здорово.
Мне нужны другие примеры (код или действия), которые могут касаться таблицы eav_attribute_option_swatch.

Примечание:
У меня действительно установлены некоторые сторонние расширения и еще несколько, которые были разработаны внутри компании. Но я просто ищу здесь идеи.

Author: Marius, 2019-01-17

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 минут будет повторяться выход из системы, пока в таблице не будет

 1
Author: Richard, 2019-01-17 16:23:06

С помощью сообщества... проблема в том, как сообщается здесь, неправильный запрос на удаление образцов опций при изменении атрибута с образца на раскрывающийся список.
Запрос на удаление образцов строится с помощью ->where('option_id', $optionId) вместо ->where('option_id = ?', $optionId).
Исправлено на данный момент с помощью плагина around для \Magento\Swatches\Model\ResourceModel\Swatch::clearSwatchOptionByOptionIdAndType

 0
Author: Marius, 2019-02-05 08:36:58