如何以编程方式更新Magento Customer上的自定义属性?

时间:2015-01-30 16:26:19

标签: magento magento-1.7

我使用以下代码为Customer添加了一个新的自定义属性。

$installer = $this;
$installer->startSetup();
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$entityTypeId = $setup->getEntityTypeId('customer');
$attributeSetId = $setup->getDefaultAttributeSetId($entityTypeId);
$attributeGroupId = $setup->getDefaultAttributeGroupId($entityTypeId, $attributeSetId);
$installer->addAttribute("customer", "stripe_customer_id", array(
    "type" => "varchar",
    "backend" => "",
    "label" => "Stripe ID",
    "input" => "text",
    "source" => "",
    "visible" => true,
    "required" => false,
    "default" => "",
    "frontend" => "",
    "unique" => false,
));
$attribute = Mage::getSingleton("eav/config")->getAttribute("customer", "stripe_customer_id");
$setup->addAttributeToGroup(
        $entityTypeId, $attributeSetId, $attributeGroupId, 'stripe_customer_id', '999'  //sort_order
);
$used_in_forms = array();
$used_in_forms[] = "adminhtml_customer";
$attribute->setData("used_in_forms", $used_in_forms)
        ->setData("is_used_for_customer_segment", true)
        ->setData("is_system", 0)
        ->setData("is_user_defined", 1)
        ->setData("is_visible", 1)
        ->setData("sort_order", 100)
;
$attribute->save();
$installer->endSetup();

我可以在Magento admin中看到新的属性字段。

Custom Customer attribute

现在,当我尝试使用以下代码更新结帐时的自定义属性

$order = $payment->getOrder();
$customer = Mage::getModel('customer/customer')->load($order->getCustomerId());
$customer->setWebsiteId(Mage::app()->getWebsite()->getId());
$customer->setStripeCustomerId('887475748');
try {
    $customer->save();
    print('Saved: '.$customer->getStripeCustomerId());
} catch (Exception $ex) {
   Mage::throwException($ex->getMessage());
}

上面的代码打印'已保存:887475748'并且从不抛出任何异常。这意味着客户正在保存而没有任何错误,但是当我在管理面板上看到信息时,该字段中没有任何内容。

注意:我刷新Magento缓存几次,刷新缓存存储并刷新Magento缓存,但没有成功。

如果我在这里遗漏了某些东西,有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

您需要添加以下表单条目:

$ used_in_forms [] =" customer_account_create&#34 ;; $ used_in_forms [] =" customer_account_edit&#34 ;;

答案 1 :(得分:0)

您需要使用以下代码......

$customer->setStripeId('887475748');

这不知道变量的确切名称,但是从文本中猜测,看起来你在调用中添加了一个额外的单词“customer”来设置它。

你也可以这样做......

$customer['name_of_attribute_here'] = '88747etc';

这种方式有时比magento的套管和函数调用中的_字符替换更容易理解。

您当前的代码所做的只是向客户对象添加变量,而不是更改客户EAV本身的一部分。