将自定义字段添加到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();

方法二

至此,我已经厌倦了阅读那7篇没有帮助的文章,因此我尝试着使一个领域工作。我还检查了Magento中的错误日志,发现“ $ this-> getTable()”是错误的,因此将其删除。

<?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 2013年

Answers:


11

您的推定是正确的。
但是对于sales_桌子,它们是相同的。
最初,销售实体是EAV。从1.4.0.1版开始,它们变成了平面表(我认为)。为了向后兼容,保留了这两种方法。
对于任何其他平面表实体(cms页,块,民意调查),您不能addAttribute仅使用addColumn,而对于销售而言,则可以同时使用。
如果您打算制作必须与1.4之前的版本兼容的扩展,addAttribute请使用,否则我看不到任何意义。


感谢您提供的信息,我认为这真的很有帮助。实际上,现在考虑一下,我想正确的方法是使用addColumn方法?虽然也没有使用'getTable'作为sales_flat_order就是这样。我会很快尝试一下,并以定罪的方式返回:)
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
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.