sales_flat_order에 사용자 정의 필드 추가


14

나는 상당한 양의 인터넷 검색, 시행 착오를 겪었지만 문제에 대한 해결책을 찾을 수 없습니다.

  1. sales_order_grid의 필드와 순서를 변경하는 기능 과
  2. 이 그리드에 두 개의 사용자 정의 필드를 표시하는 기능 (필터링 가능).

전자 (포인트 1)는 Mage_Adminhtml_Block_Widget_Grid내 사용자 정의 모듈 을 확장하여 해결되었습니다 (관찰자에 대해 알고 있지만 설치된 다른 모듈이 변경 사항을 관행으로 재정의했습니다).

어쨌든 후자는 내 현재 문제이며, 지금까지 저를 실패시킨 두 가지 방법이 있습니다.

방법 1

<?php
/*  @var $this Mage_Sales_Model_Mysql4_Setup  */
$this->startSetup();
$connection = $this->getConnection();

/**
 * Create the payment method dropdown field, because this field _may_ be
 * used for searching we will create an index for it.
 */
$connection->addColumn(
    $this->getTable('sales/order_grid'),
    'x_payment_method',
    "ENUM('PayPal', 'SagePay') DEFAULT NULL"
);
$connection->addKey($this->getTable('sales/order_grid'), 'x_payment_type', 'x_payment_type');

/**
 * Create the order channel field to identify where the order was originally
 * generated from. Also add an index for this field for additional filtering.
 */
$connection->addColumn(
    $this->getTable('sales/order_grid'),
    'x_sale_channel',
    "ENUM('Amazon', 'Play', 'eBay', 'Website') NOT NULL DEFAULT 'Website'"
);
$connection->addKey($this->getTable('sales/order_grid'), 'x_sale_channel','x_sale_channel');

$this->endSetup();

방법 2

이 시점에서 나는 도움이되지 않은 동일한 7 개의 기사를 읽는 것에 지쳤다. 또한 Magento에서 오류 로그를 확인하고 "$ this-> getTable ()"이 errornous 인 것을 발견하여 제거했습니다.

<?php
/*  @var $this Mage_Sales_Model_Mysql4_Setup  */
$this->startSetup();
$connection = $this->getConnection();

/**
 * Create the payment method dropdown field, because this field _may_ be
 * used for searching we will create an index for it.
 */
$this->addAttribute('sales_flat_order', 'x_test_option', array(
    'label' => 'X Test Option',
    'type' => 'varchar',
    'input' => 'select',
    'visible' => true,
    'required' => false,
    'position' => 1,
    'visible_on_front'  => false,
    'option' => array('value' => array('web', 'test 1', 'test 2')),
    'default' => array('web'),
));

$this->endSetup();

질문을하는 것은 무엇입니까? 열과 속성의 차이점은 무엇입니까? 필자의 초기 추정은 열이 기존 코어 테이블에 추가되고 속성이 EAV_ * 테이블에 추가되고 적절하게 관련되어 있다는 것입니다.


해당 테이블이 평탄하더라도 테이블의 자원 모델은 EAV이므로 속성을 기록하려면 EAV 구성에 등록해야합니다. 여러 판매 엔티티 에 사용 EAV를 할 수 있지만 성능상의 이유로 평평했다.
benmarks

답변:


11

추정이 정확합니다.
그러나 sales_테이블의 경우 하나이며 동일합니다.
처음에는 영업 엔터티가 EAV였습니다. 버전 1.4.0.1부터 플랫 테이블로 변경되었습니다 (제 생각에). 그리고 이전 버전과의 호환성을 위해 두 방법 모두 유지되었습니다.
다른 플랫 테이블 엔터티 (cms 페이지, 블록, 설문 조사)의 addAttribute경우에만 사용할 수 없지만 addColumn판매에는 양방향으로 작동합니다.
1.4 이전 버전과 호환되는 확장을 만들 계획이라면을 사용하십시오 addAttribute. 그렇지 않으면 아무 의미가 없습니다.


이 정보가 정말 도움이된다는 정보에 감사드립니다. 실제로, 지금 그것에 대해 생각하면서, 올바른 방법이 방법을 사용 addColumn하는 것이라고 생각 합니까? sales_flat_order가 'getTable'을 사용하지 않는 것만 같습니다. 나는 곧 그것을 시도하고, 평결과 함께 돌아갈 것이다 :)
ash

2
그것은 두 가지 문제가 있음이 밝혀졌습니다. 하나도 $this->getTable('sales/flat_order')설정할 수 있습니다 sales_flat_order; 두 번째는 $connection->addKey($this->getTable('sales/order_grid'), 'x_payment_type', 'x_payment_type');; x_payment_type이어야했다 x_payment_method.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.