Вручную удалите продукт из базы данных


В базе данных у меня есть продукт, созданный с использованием расширения, установленного в предыдущей установке magento (1.6.2) (для той, которую я запускаю в настоящее время - 1.9.2). Расширение больше не используется и не было добавлено в новую систему. Все соответствующие данные (продукты, продажи, учетные записи и т. Д. и т. Д. и т. Д.) Были перенесены с magento 1.6.2 на мою новую блестящую установку 1.9.2. К сожалению, я забыл о продукте, созданном с помощью этого расширения (продукт booking). И поскольку это расширение больше не является частью моей системы, каждый раз, когда оно появляется, оно вызывает ошибку сайта.

Эта ошибка возникает в администраторе и на интерфейсе. Ошибка связана с отсутствующим типом продукта в базе данных

(Указана неверная модель серверной части: тип booking/entity_attribute_backend_rangetype).

Что, как я понимаю, означает, что в базе данных нет ссылки на тип продукта "бронирование", потому что расширение не установлено для добавления этой информации в система.

Просматривая таблицы catalog_..., я могу найти идентификатор сущности EAV рассматриваемого продукта, но задался вопросом, есть ли более простой способ удалить все ссылки на этот идентификатор сущности из всех таблиц базы данных, кроме как просматривать их все по одному и вручную удалять строки?

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

Как только я создам коллекцию, я выполню цикл через него (всего есть 2 продукта этого типа), но система не может удалить продукты. Вот код для цикла через...

foreach ($collection as $product) {
    $thisProductID = $product->getId();

    try {
        $product = Mage::getModel("catalog/product")->load($thisProductID);
        if ($product) {
            $product->delete();
            echo '<p>'.$thisProductID.' - Deleted successfully'.'</p>'; 
        }
    }
    catch (Exception $e) {
        echo '<p>'.$thisProductID.' - Delete failed: ', $e->getMessage(), '</p>'; 
    }

}

И вот мой вывод, когда я запускаю это:

25712 - Ошибка удаления: Указана неверная модель серверной части: тип бронирования/entity_attribute_backend_rangetype

25713 - Ошибка удаления: Указана неверная модель серверной части: тип бронирования/entity_attribute_backend_rangetype

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

Любые предложения более чем приветствуются:-)

Author: Community, 2016-05-09

2 answers

Используя функцию delete(), лучше удалить объект продукта из базы данных.

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

Delete failed: Invalid backend model specified: booking/entity_attribute_backend_rangetype

Итак, если вы будете устраните эту проблему тогда вы будете снова удалите продукт с помощью команды удалить() это будет лучшей идеей.

Позвольте решить недопустимый серверный сервер указанная модель:

Эта ошибка возникает, когда в вашей системе атрибут и эта бэкэнд-модель атрибута booking/entity_attribute_backend_rangetype и этот класс бэкэнд-модели имеет уже удален из системы.

Поэтому, если мы удалим этот атрибут, то $product->удалить(), будет работать правильно.

Итак, выполните этот запрос:

DELETE FROM `eav_attribute` WHERE `backend_model`='booking/entity_attribute_backend_rangetype'

Примечание: Прежде чем сделать это, сделайте полную резервную копию база данных

Теперь запустите свой код $product->delete(); и посмотрите, что произойдет

 1
Author: Amit Bera, 2016-05-09 19:46:29

Проверьте эту таблицу eav_attribute и выполните поиск

(бронирование/entity_attribute_backend_rangetype) в столбце серверная модель. если вы нашли, то удалите эту строку.

 0
Author: Sourav, 2016-05-17 01:22:06