Magento 2 Reindex возвращает нет такой сущности

14

Я успешно перенес каталог из Magento 1.9.2.3 в Magento 2.0.2. После миграции я сделал переиндексацию с помощью команды php bin/magento indexer:reindex.

Все успешно переиндексируется, кроме индексов catalog_category_productи catalog_product_category, возвращающихся No such entity.в shell и уведомлений Reindex Requiredв admin. Я проверил, var/log/но ошибок нет.

В результате товары добавляются в категории в бэкэнде, но категории отображаются пустыми в веб-интерфейсе.

Что может вызвать эту проблему? Как я могу отладить?

Жерар де Виссер
источник
в основном тот же magento.stackexchange.com/questions/102739/…
Патрик-Пенг

Ответы:

7

В дополнение к Рафаэлю:

Я отладил этот код с изменением конструктора исключений для целей отладки (либо с помощью xdebug, либо с помощью старых дампов). Измените конструкцию исключения на данный момент (файл \lib\internal\Magento\Framework\Exception\NoSuchEntityException.php)

$trace = debug_backtrace();
var_dump($trace[1]['class'] . '::' . $trace[1]['function'] . '('.$trace[1]['line'] .')';
die();

После этого поднимитесь на один стек и проверьте заданные аргументы (аргументы также доступны в отладочной трассировке, но выгрузка объектов magento не очень удобна для браузера).

Пришел к выводу, что storeGroupRepositoryон не может найти идентификатор группы. Окунулся в таблицы магазинов и увидел несколько строк в таблице магазинов, которые ссылались на a store_group, которого не было в store_groupтаблице (группа магазинов не существует в соответствующей таблице).

Удалил неисправные строки магазина, и ошибка исчезла с тех пор.

Но имейте в виду, что это также может быть в другой таблице / другой причине. например, веб-сайт, магазин или группа магазинов в этом случае. Так что это всегда маленький поиск, который вы должны выполнить самостоятельно.

Также выяснилось, что ссылок на эти магазины было довольно много, а также удалил их вручную в БД. Это может быть утомительной работой, но она решит проблему.

И не забудьте удалить свои хаки.

TimVroom
источник
почему вы не используете вместо этого xdebug?
Лука
@TimVroom У меня также та же ошибка. Пожалуйста, помогите мне magento.stackexchange.com/q/236187/24878
Акгола
11

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

Этот скрипт работал для меня:

SET FOREIGN_KEY_CHECKS=0;
UPDATE `store` SET store_id = 0 WHERE code='admin';
UPDATE `store_group` SET group_id = 0 WHERE name='Default';
UPDATE `store_website` SET website_id = 0 WHERE code='admin';
UPDATE `customer_group` SET customer_group_id = 0 WHERE customer_group_code='NOT LOGGED IN';
SET FOREIGN_KEY_CHECKS=1;

Надеюсь, это поможет.

Адам Стейси
источник
это мне очень помогло, спасибо, что поделились!
favo
Это также сработало для меня :)
Оуэн
3

Итак, No such entity.сообщение об ошибке приходит \lib\internal\Magento\Framework\Exception\NoSuchEntityException.php.

Этот класс является пользовательским классом исключений в Magento, и он часто используется в Magento 2.

Всякий раз, когда вы видите код вроде:

catch (NoSuchEntityException $e)

Или

throw NoSuchEntityException;

Этот класс используется.

Проблема в вашем случае заключается в том, что трудно определить, откуда выбрасывается это исключение.

Таким образом, чтобы немного сузить его, вы можете начать отладку двух классов, связанных с вашими индексами, которые не работают:

  • Magento\Catalog\Model\Indexer\Category\Product=> catalog_category_product index
  • Magento\Catalog\Model\Indexer\Product\Category=> каталог_продукта_категория указатель

К счастью, второй расширяет первый, поэтому у вас есть одна отправная точка.

Вы должны иметь в виду, что каждый из этого класса индексатора использует классы строк действия для обработки переиндексации:

  • Magento\Catalog\Model\Indexer\Product\Category\Action\Rows
  • Magento\Catalog\Model\Indexer\Category\Product\Action\Rows

Для меня это то, где вы должны начать отладку, поскольку эти классы строк действий являются прямыми классами, которые переиндексируют эти два индекса.

Я действительно надеюсь, что это поможет вам найти вашу проблему.

Рафаэль в цифровом пианизме
источник
Привет @ Рафаэль, у меня есть похожая проблема для создания клиентов после миграции. Пожалуйста,
akgola
0

Это работало для меня после пробовать все.

Предполагая, что ваш сайт работает Developer Mode, вы можете изменить его на Production Modeи очистить / очистить кеш, а затем переключиться обратно на Developer Mode.

У меня была эта проблема во внешнем интерфейсе, поскольку я недавно переместил базу данных с одного сервера на другой. Мне удалось решить таким способом.

НАДЕЖДА ЭТО ПОМОГАЕТ НЕКОТОРЫМ.

Thowzif
источник
0

Эта ошибка, в моем случае, была для установки с несколькими магазинами, с несколькими доменами. Magento усекает коды магазинов. Если вы отображаете домены для хранения кодов, убедитесь, что код магазина соответствует маршрутизации, указанной в index.php (или где бы вы ни отображали). В админке проверьте в разделе «Магазины» > « Все магазины ». Проверьте свой веб-сайт, магазин и магазин просмотреть коды магазина.

Как только я понял, что Magento обрезал код магазина, который я ввел, сделал ту же настройку в отображении, и все снова заработало.

Тейлор Хант
источник