문제

주문을 삭제해도 주문 그리드에 계속 표시됩니다.열려고 하면 메시지가 나타납니다.

이 주문은 더 이상 존재하지 않습니다.

이 동작은 Magento 업데이트로 인해 도입된 것으로 보입니다.최신 버전의 Magento를 다운로드하고 기존 파일을 덮어썼습니다.

주문이 여전히 그리드에 표시되는 이유는 무엇이며 이를 어떻게 조정할 수 있나요?

도움이 되었습니까?

해결책

다른 사람들이 말했듯이, 당신은 당신의 기록에 고아가 있습니다 sales_flat_order_grid 메인 주문 테이블에 없는 테이블, sales_flat_order.귀하의 Magento 인스턴스에서 기본이 아닌 두 가지 동작에 주목하고 있습니다.

  1. 주문을 삭제할 수 있습니다.기본 Magento에서는 주문을 삭제할 수 없습니다.라이브 환경에서는 주문 삭제를 허용하지 않는 것이 좋습니다.

  2. MySQL 제약조건(CONSTRAINT... ON DELETE CASCADE) 그리드 테이블의 항목이 제거되었습니다.어떤 방법으로든 주문 기록이 삭제되면 DB는 자동으로 관련 기록을 모두 제거해야 합니다. sales_flat_order_* 그리드가 포함된 테이블입니다.

인스턴스의 무결성을 복원하려면 두 가지 작업을 수행해야 합니다.

  1. MySQL 제약 조건을 다시 설정합니다.이렇게 하면 고아 주문 기록을 방지할 수 있습니다.이것은 주제에서 벗어난 것 같습니다. 아래에서 현재 문제에 대한 해결책을 제시하겠습니다.

  2. 고아 주문 그리드 레코드를 제거합니다.다음 쿼리를 실행하여 제거하세요.

실행 전 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; 
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 magento.stackexchange
scroll top