Magento更改默认付款方式

时间:2016-05-12 00:25:09

标签: magento magento-1.9

我有一个函数可以在Magento中运行原始SQL查询到我们的数据库。该功能的作用是将客户的默认信用卡更改为传递给该功能的值。我的问题是如何利用Magento模型重写功能。当前函数有效,但我们宁愿它不直接与SQL接口。

这是功能:

public function setDefaultPayment($value)
{
    $customerId = $this->_getSession()->getCustomer()->getId();
    $write = Mage::getSingleton('core/resource')->getConnection('core_write');

    $read = $write->query("SELECT entity_type_id FROM eav_entity_type WHERE entity_type_code='customer'");
    $row = $read->fetch();
    $entity_type_id = $row['entity_type_id'];

    $read = $write->query("SELECT attribute_id FROM eav_attribute WHERE attribute_code='default_payment' AND entity_type_id = $entity_type_id");
    $row = $read->fetch();
    $attribute_id = $row['attribute_id'];

    $read = $write->query("SELECT * FROM customer_entity_int WHERE entity_type_id='$entity_type_id' AND attribute_id='$attribute_id' AND entity_id='$customerId'");
    if ($row = $read->fetch()) {
        $write->update(
            'customer_entity_int',
            array('value' => $value),
            "entity_type_id='$entity_type_id' AND attribute_id='$attribute_id' AND entity_id='$customerId'"
        );
    } else {
        $write->insert(
            'customer_entity_int',
            array(
                'entity_type_id' => $entity_type_id,
                'attribute_id' => $attribute_id,
                'entity_id' => $customerId,
                'value' => $value
            )
        );
    }
}

1 个答案:

答案 0 :(得分:1)

如果我向您朗读代码,您希望使用给定的值更新客户属性default_payment

为此你需要:

  • 按ID
  • 加载客户
  • 设置客户属性default_payment
  • 的新值
  • 保存客户
public function setDefaultPayment($value)
{
    $customerId = $this->_getSession()->getCustomer()->getId();
    $write = Mage::getSingleton('core/resource')->getConnection('core_write');

    $customer = Mage::getModel('customer/customer')->load($customerId);
    $oldValue = $customer->getDefaultPayment(); // optional, just for checking
    $customer->setDefaultPayment($value);
    $customer->save();

}