我想更新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();
}
但它没有用,任何人都可以建议我在更新数据时遇到的问题。
答案 0 :(得分:2)
您可以执行 MAGIC 功能,get
和set
功能
直接尝试:
// 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();
}