我使用以下代码为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中看到新的属性字段。
现在,当我尝试使用以下代码更新结帐时的自定义属性
$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缓存,但没有成功。
如果我在这里遗漏了某些东西,有人可以帮助我吗?
答案 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本身的一部分。