addcolumn to case 데이터가있는 sales_flat_order_grid 테이블
-
11-12-2019 - |
문제
Using Magento ver. 1.9.0.1.
이 놀랍도록 잘 작성된 대답을 사용하여 " 열을 그리드에 추가 (옵저버) - 열의 'store_id'컬럼 절이 모호한 문제 sales_flat_order_grid에 새로운 기본 열을 추가했습니다 표.
그러나 내 요구 사항의 다음 부분은 나를 괴롭 혔습니다! Case MySQL을 사용하여 데이터 조작 된 데이터가있는 Sales_Flat_Order_Grid 테이블에 새 열을 추가하려고합니다. 이 아이디어는 주문이 지불되었거나, sales_flat_order_payment 테이블에서 데이터를 기반으로 지불을 기반으로 지불되거나 지급되거나 여전히 지불을 기다리는 경우 새로운 열이 추가된다는 것입니다.
MySQL의 쿼리는 다음과 같습니다.
.
SELECT `order_grid`.*,
CASE
WHEN `order`.`total_paid` > `order`.`grand_total` AND `order`.`total_paid` > 0 THEN 'part_paid'
WHEN `order`.`total_paid` = `order`.`grand_total` THEN 'paid'
ELSE 'not_paid'
END AS `payment_status`
FROM `sales_flat_order_grid` AS `order_grid`
LEFT JOIN `sales_flat_order` AS `order`
ON `order`.`entity_id` = `order_grid`.`entity_id`
Zend Appert 가이 (가) 다음과 같이 보입니다.
.
/*
=================
Code sample from modified version of
/app/code/community/Example/SalesGrid/sql/example_salesgrid_setup/install-0.1.0.php
(See linked example above)
=================
*/
$adapter = $this->getConnection();
$select = $adapter->select();
$case_payment_status = $adapter->getCaseSql('', array(
'order_payment.amount_paid 0' => '"part_paid"',
'order_payment.amount_paid = order_payment.amount_ordered' => '"paid"'
), '"not_paid"');
$select->join(
array('order_payment'=>$this->getTable('sales/order_payment')),
$this->getConnection()->quoteInto(
'order_payment.parent_id = order_grid.entity_id'
),
array(
'payment_status' => $case_payment_status
)
);
이 코드는 새로운 payment_status 열 이이 사례의 데이터가 설치 / 업그레이드 / app / code / community / example / salesgrid / sql / example_salesgrid_setup을 올바르게 채워졌습니다. install-0.1.0.php
# 질문 #
내 질문은 addVirtualGridColumn 을 사용하여 리소스 에이 새로운 대소 문자를 작성한 payment_status 열을 어떻게 추가 할 수 있습니까? 아래 코드는 주문 업데이트 / 저장에 대해 알 수없는 오류를 제공합니다 ...
.
class Example_SalesGrid_Model_Observer {
public function addColumnToResource(Varien_Event_Observer $observer) {
// Only needed if you use a table other than sales/order (sales_flat_order)
$resource = $observer->getEvent()->getResource();
$adapter = $resource->getReadConnection();
$case_payment_status = $adapter->getCaseSql('', array(
'{{table}}.amount_paid 0' => '"part_paid"',
'{{table}}.amount_paid = {{table}}.amount_ordered' => '"paid"'
), '"not_paid"');
$resource->addVirtualGridColumn(
'payment_status',
'sales/order_payment',
array('parent_id' => 'entity_id'),
$case_payment_status
);
}
}
해결책이 매우 가까이 있지만 혼자 도달 할 수 없다고 생각하는 것처럼 누군가가 올바른 방향으로 나를 도울 수 있거나 나를 가리킬 수 있기를 바랍니다.
문제를 충분히 설명하지 않았다면 질문이 있으시면 알려주십시오.
미리 감사드립니다!
해결책
정렬!누구나 솔루션에 관심이 있으시면 링크 된 대답으로 배치 된 단계를 따르지 만 Observer에서 :
class Example_SalesGrid_Model_Observer {
public function addColumnToResource(Varien_Event_Observer $observer) {
// Only needed if you use a table other than sales/order (sales_flat_order)
$resource = $observer->getEvent()->getResource();
$adapter = $resource->getReadConnection();
// Define the CASE Statement
// ------------------------
$casePaymentStatus = $adapter->getCaseSql('', array(
'{{table}}.amount_paid 0' => '"part_paid"',
'{{table}}.amount_paid = {{table}}.amount_ordered' => '"paid"',
), '"not_paid"');
// Insert the CASE Statement into the getConcatSql() Method
// ------------------------
$concatPaymentStatus = $adapter->getConcatSql(array($casePaymentStatus));
// Add the Virtual Grid Column
// ------------------------
$resource->addVirtualGridColumn(
'payment_status',
'sales/order_payment',
array('entity_id' => 'parent_id'),
$concatPaymentStatus
);
}
}
.