삭제된 주문은 그리드에서 제거되지 않습니다.
-
12-12-2019 - |
문제
주문을 삭제해도 주문 그리드에 계속 표시됩니다.열려고 하면 메시지가 나타납니다.
이 주문은 더 이상 존재하지 않습니다.
이 동작은 Magento 업데이트로 인해 도입된 것으로 보입니다.최신 버전의 Magento를 다운로드하고 기존 파일을 덮어썼습니다.
주문이 여전히 그리드에 표시되는 이유는 무엇이며 이를 어떻게 조정할 수 있나요?
해결책
다른 사람들이 말했듯이, 당신은 당신의 기록에 고아가 있습니다 sales_flat_order_grid
메인 주문 테이블에 없는 테이블, sales_flat_order
.귀하의 Magento 인스턴스에서 기본이 아닌 두 가지 동작에 주목하고 있습니다.
주문을 삭제할 수 있습니다.기본 Magento에서는 주문을 삭제할 수 없습니다.라이브 환경에서는 주문 삭제를 허용하지 않는 것이 좋습니다.
MySQL 제약조건(
CONSTRAINT... ON DELETE CASCADE
) 그리드 테이블의 항목이 제거되었습니다.어떤 방법으로든 주문 기록이 삭제되면 DB는 자동으로 관련 기록을 모두 제거해야 합니다.sales_flat_order_*
그리드가 포함된 테이블입니다.
인스턴스의 무결성을 복원하려면 두 가지 작업을 수행해야 합니다.
MySQL 제약 조건을 다시 설정합니다.이렇게 하면 고아 주문 기록을 방지할 수 있습니다.이것은 주제에서 벗어난 것 같습니다. 아래에서 현재 문제에 대한 해결책을 제시하겠습니다.
고아 주문 그리드 레코드를 제거합니다.다음 쿼리를 실행하여 제거하세요.
실행 전 DB를 백업하세요.먼저 개발 환경에서 테스트해 보세요.나는 귀하의 데이터 손실에 대해 책임을 지지 않습니다.
DELETE
FROM `sales_flat_order_grid`
WHERE entity_id IN (
SELECT * FROM (
SELECT g.entity_id
FROM `sales_flat_order_grid` AS g
INNER JOIN `sales_flat_order` AS o
ON g.`entity_id` = o.`entity_id`
WHERE g.entity_id IS NULL
) AS t
)
다른 팁
사고,
Order는 테이블에서 시스템에서 이미 삭제되었습니다. sales_flat_order
. 여기에서 확인해야합니다.
나는 순서가 sales_flat_order_grid
데이터베이스 테이블에 있지만 doesn't exits on sale_flat_order
모델 [main table of sales order
]
Mage::getModel('sales/order')
테이블이 있다고 생각합니다.
클래스 Mage_Adminhtml_Sales_OrderController
자홍색이 점검되거나 아닌지가 아닌 경우
함수 inititorder
protected function _initOrder()
{
$id = $this->getRequest()->getParam('order_id');
$order = Mage::getModel('sales/order')->load($id);
if (!$order->getId()) {
$this->_getSession()->addError($this->__('This order no longer exists.'));
$this->_redirect('*/*/');
$this->setFlag('', self::FLAG_NO_DISPATCH, true);
return false;
}
Mage::register('sales_order', $order);
Mage::register('current_order', $order);
return $order;
}
.
주문이 제대로 삭제되지 않음을 의미합니다.
sales_flat_order_grid에서 이러한 순서를 삭제해야합니다.
문제는
입니다. sales_flat_order_grid
테이블에 Order 항목이 존재하지만 sales_flat_order
테이블에서 누락되었습니다
해결책은
sales_flat_order 테이블에 참조가없는 sales_flat_order_grid 테이블에서 항목 삭제
데이터베이스 에서이 SQL 쿼리를 실행하십시오.
DELETE FROM `sales_flat_order_grid`
WHERE entity_id NOT IN (
SELECT `entity_id` FROM `sales_flat_order`
);
.
이벤트에 sales_flat_order table
에 트리거를 추가하지 않으면
DELETE FROM sales_flat_order_grid WHERE OLD.entity_id=sales_flat_order_grid.entity_id;
.