Как удалить заказы?

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
#1 Роман Цегинька
  • Группа: Заблокирован
  • Сообщений: 95
  • Регистрация: 01.08.2011

30.10.2011 15:36

К теме я написал такую ​​функцию которая должна была удалять записи заказа. Ниже привожу сам sql запрос он работает но к сожалению не так как нужно. Данный запрос удаляет все записи из данных таблиц, однако при указании параметра WHERE он престает выполняться. Я проверял сам запрос непосредственно на базе данных все работает как и должно, однако с самого Магенто он выполняться категорически отказывается. Я так понимаю, что именно Магенто выполняет блокировки таких действий. Однако, если возможно подскажите, как можно обойти данный блок.


Ето работает
[$connection = Mage::getSingleton('core/resource')->getConnection('core_write');
$connection->beginTransaction();
$delete = $connection->query('

SET FOREIGN_KEY_CHECKS=0;

ALTER TABLE `catalogsearch_query` AUTO_INCREMENT=1;


DELETE FROM sales_flat_order;
DELETE FROM sales_flat_order_address;
DELETE FROM sales_flat_order_grid;
DELETE FROM sales_flat_order_item;
DELETE FROM sales_flat_order_payment;
DELETE FROM sales_flat_order_status_history;


ALTER TABLE `sales_flat_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_payment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_status_history` AUTO_INCREMENT=1;
SET FOREIGN_KEY_CHECKS=1;


Ето нет
$connection = Mage::getSingleton('core/resource')->getConnection('core_write');
$connection->beginTransaction();
$delete = $connection->query('

SET FOREIGN_KEY_CHECKS=0;

ALTER TABLE `catalogsearch_query` AUTO_INCREMENT=1;


DELETE FROM sales_flat_order WHERE entity_id=20;
DELETE FROM sales_flat_order_address WHERE parent_id=20;
DELETE FROM sales_flat_order_grid WHERE entity_id=20;
DELETE FROM  sales_flat_order_item WHERE order_id=20;
DELETE FROM  sales_flat_order_payment WHERE entity_id=20;
DELETE FROM   sales_flat_order_status_history WHERE parent_id=20;


ALTER TABLE `sales_flat_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_payment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_status_history` AUTO_INCREMENT=1;
SET FOREIGN_KEY_CHECKS=1;


');

Если выполнить этот запрос напрямую в базе все отработает.

#2 Евгений Шевченко (вор)
  • ворует чужие модули и перепродаёт
  • Группа: Заблокирован
  • Сообщений: 126
  • Регистрация: 17.08.2010

30.10.2011 23:49

Я рекомендую воспользоваться модулями, позволяющими удалять заказы непосредственно из админки, а не лезть в базу
http://www.magentocommerce.com/magento-connect/seamless-delete-order.html
http://www.magentocommerce.com/magento-connect/asperience-deleteorders.html

Если вам всё-таки хочется победить базу magento - это не ко мне

#3 Роман Цегинька
  • Группа: Заблокирован
  • Сообщений: 95
  • Регистрация: 01.08.2011

31.10.2011 10:15

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

#4 Евгений Шевченко (вор)
  • ворует чужие модули и перепродаёт
  • Группа: Заблокирован
  • Сообщений: 126
  • Регистрация: 17.08.2010

31.10.2011 11:34

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

#5 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

31.10.2011 13:10

В дополнение к основному минусу удаления заказов заметил ещё один: оказывается, так как удаление заказов - непредусмотренная (запрещённая) в Magento функция, то некоторые отчёты перестают работать корректно после удаления заказов.

Обычно такой эффект возникает, когда другие учётные объекты ассоциированы, но не агрегированы (используя терминологию UML) с удалённым объектом.

Пример: отчёт о применении купонов (Coupons Usage Report).
Если удалить заказ (запрещённая операция), в котором покупатель воспользовался скидочным купоном, то факт использования скидочного купона останется в системе, в то время как сам заказ уже будет отсутствовать в системе. Это приводит к ошибочным цифрам в отчёте.

#6 Роман Цегинька
  • Группа: Заблокирован
  • Сообщений: 95
  • Регистрация: 01.08.2011

31.10.2011 15:32

Да я написал сам модуль все работает супер. Правда писал с полного 0 и не пользовался готовой функцией по удалении. Мне почему то проще было разобраться с 0, чем в функциях Магенто. Видимо здесь сыграло большую роль маловаты знание данной системы. И относительно купонов, спасибо Дмитрий что подсказали. Буду делать удаление так чтобы информация необходимой для работы с купонами оставалась целисной, а база максимально почищеной. Всем спасибо за помощь, думаю еще спишемось:).

#7 Роман Цегинька
  • Группа: Заблокирован
  • Сообщений: 95
  • Регистрация: 01.08.2011

31.10.2011 16:06

а если записи идут с начала как с этим бороться?

#8 Евгений Шевченко (вор)
  • ворует чужие модули и перепродаёт
  • Группа: Заблокирован
  • Сообщений: 126
  • Регистрация: 17.08.2010

31.10.2011 16:47

нужно сдвигать номера всех заказов

#9 Роман Цегинька
  • Группа: Заблокирован
  • Сообщений: 95
  • Регистрация: 01.08.2011

31.10.2011 17:31

Такой вопрос как исправить эту ошибку SQLSTATE [HY000]: General error: 2014 / Проблемы начинаются если ордеров для удаления становится больше 1. То есть первый удаляет нормально и все остальные тоже однако выбрасывает ошибку SQLSTATE [HY000]: General error: 2014. Как можно обойти это

Поделиться темой: