销售订单表中的更新 - Magento Model

时间:2012-09-03 14:03:25

标签: magento

我想更新magento中的一个字段值我正在使用

$data = array('xxx'=>$xxx);
$orderModel = Mage::getModel('sales/order')->load($orderId)->addData($data);
try {
    $orderModel->setId($orderId)->save();
    echo "Data updated successfully.";
} catch (Exception $e){
    echo $e->getMessage();
}

但它没有用,任何人都可以建议我在更新数据时遇到的问题。

2 个答案:

答案 0 :(得分:2)

您可以执行 MAGIC 功能,getset功能

直接尝试:

// if your attribute is column named is_active then you can getIsActive() or setIsActive(1)
$orderModel = Mage::getModel('sales/order')->load($orderId)->setYourAttribute($data);
// it means you can set and get column named by ['your_attribute']
try {
    $orderModel->setId($orderId)->save();
    echo "Data updated successfully.";
} catch (Exception $e){
    echo $e->getMessage();
}

嗯。我不知道你为什么设置销售/订单模型的entity_id。但它不起作用,因为entity_id可以是另一个表上的外键,例如:sales_flat_order_payment

答案 1 :(得分:1)

您的代码setId($orderId)看起来要么明确地设置订单entity_id(即创建订单),要么您只是不知道事实,即您没有加载后需要setId($orderId),如果您只想更新给定的订单。

如果您尝试创建订单:sales/order模型通常允许明确设置订单entity_id,因为它使用的是主键默认情况下自动递增。

如果您尝试更新现有订单,请从setId($orderId)链中移除save()

其次,如果您希望能够将其值保存到数据库,则需要首先使用sales/order属性扩展xxx模型。

有几种方法可以将sales/order模型扩展为具有自定义属性。例如,您可以在app/code/local/Mycompany/Mymodule/sql/myresource/文件夹中拥有自己的设置脚本:

// Mage_Eav_Model_Entity_Setup
$oInstaller = $this;

// Add EAV attribute
$oInstaller->startSetup();
$oInstaller->addAttribute(
    'order',
    'my_attribute',
    array(
        'type' => 'int'
    )
);
$oInstaller->endSetup();

// Add flat attribute
if (Mage::getVersion() >= 1.1) {
    $oInstaller->startSetup();
    $oConnection = $oInstaller->getConnection();
    $oConnection->addColumn(
        $oInstaller->getTable('sales_flat_order'),
        'my_attribute',
        'TINYINT(1) NOT NULL'
    );
    $oInstaller->endSetup();
}