Schema 使用Magento中的订单保存额外数据

Schema 使用Magento中的订单保存额外数据,schema,magento,Schema,Magento,我必须在“订单”页面中添加一列,这意味着在销售\平面\订单\网格中添加一列。这两个都是可能的,但是我不知道如何添加一个值,以便将其保存在我的新列中 我也必须注册新属性吗? 该值不在报价中,因此我想我不需要在config/global/fieldset/sales\u convert\u quote下注册,因为该值不在那里进行转换 使用Magento Enterprise 1.8。您必须添加属性,最好的方法是通过扩展更新或设置脚本。由于order和quote是基于平面表结构的,这实际上意味着向这些

我必须在“订单”页面中添加一列,这意味着在
销售\平面\订单\网格中添加一列
。这两个都是可能的,但是我不知道如何添加一个值,以便将其保存在我的新列中

我也必须注册新属性吗?
该值不在报价中,因此我想我不需要在
config/global/fieldset/sales\u convert\u quote下注册,因为该值不在那里进行转换


使用Magento Enterprise 1.8。

您必须添加属性,最好的方法是通过扩展更新或设置脚本。由于order和quote是基于平面表结构的,这实际上意味着向这些表添加更多字段


也请看

经过大量的尝试和错误-大量的错误-我想我现在已经有了

首先,
sales\u flat\u order\u grid
Mage\u sales\u Model\u Mysql4\u order\u Abstract::updateGridRecords()
中更新,通过遵循我制定的线索,它检查“主”表(
sales\u flat\u order
)和主表+“\u grid”(
sales\u flat\u order\u grid
),获取其列的交集并从中构造查询。因此,网格表中需要的任何列也必须位于主表中。它不是EAV样式的实体,因此不需要创建属性。
以下是我的安装脚本:

<?php

/* @var $this Nexxt_Booth_Model_Entity_Setup */
$installer = $this;

$installer->getConnection()->addColumn($installer->getTable('sales_flat_order'), 'box_num', 'varchar(255)');
$installer->getConnection()->addColumn($installer->getTable('sales_flat_order_grid'), 'box_num', 'varchar(255)');
类似地,在
My/Module/Block/Adminhtml/Customer/Edit/Tab/Orders.php和
My/Module/Block/Adminhtml/Customer/Edit/Tab/View/Orders.php中,我添加了以下功能:

    protected function _prepareColumns()
    {
        $this->addColumn('box_num', array(
            'header'    => $this->__('Box #'),
            'index'     => 'box_num',
            'width'     => '100px'
        ));
        $this->addColumnsOrder('box_num', (Mage::app()->isSingleStoreMode() ? 'grand_total' : 'store_id'));
        return parent::_prepareColumns();
    }
最后,为了结束,在事件
sales\u convert\u quote\u to\u order
中,我填充了新字段。这一点并不重要,只要您在保存订单之前的某个点添加数据即可

$order->setBoxNum('DATA GOES HERE');

此外,您还可以使用它向sales\u flat和sales\u flat\u网格添加新的“属性”(at实际上是一列,因为它是平面的)

$installer->addAttribute('order', 'box_num', array(
'label'    => 'Box Number',
'type'     => 'varchar',
'grid'     => true      // this is important
));
您的安装程序必须是:Mage_Sales_Model_Entity_Setup才能使用网格密钥

请记住,如果要将现有列D从sales_flat_order添加到sales_flat_order_grid,则需要重新同步sales_flat_order_grid表:


在我的例子中,我必须使用
Mage\u Sales\u Model\u Resource\u Setup
类来完成这个任务。使用
Mage\u Sales\u Model\u Entity\u Setup
类创建属性似乎没有任何作用(没有创建新的db列,但也没有错误)。我正试图做完全相同的事情,我在Sales\u flat\u order\u网格中创建了一个新列作为barcode\u no,并使用grid.php在magento orders网格中显示该列。现在,我如何将条形码\u no value从magento后端存储到sales\u flat\u order\u grid table中?@ShujaatShaikh您在哪一位遇到了问题?我在哪里都找不到tuturial,解释如何从magento admin后端将自定义值插入我的php数据库。任何文章都会很有帮助!我想您需要向订单视图页面添加一个输入。这太复杂了,这里无法解释。它本身就应该有一个完整的问题。我建议从看礼物信息框开始,试着理解它需要的所有东西。它在订单页面上有一个表单、一个AJAX脚本和一个更新订单的控制器。
$order->setBoxNum('DATA GOES HERE');
$installer->addAttribute('order', 'box_num', array(
'label'    => 'Box Number',
'type'     => 'varchar',
'grid'     => true      // this is important
));