3

我想更新我正在使用的 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();
}

但它不起作用,任何人都可以建议我在更新数据时创建问题。

4

2 回答 2

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();
}
于 2012-09-03T14:13:19.427 回答
1

您可以执行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

于 2012-09-03T14:26:36.030 回答