2015-06-09 79 views
0

我来自以前的环境,其中执行修改查询和添加列只是写入sql并执行它的问题。但是,现在我正在Magento工作,我想要做的事情是“Magento的方式”。Magento在sales_flat_quote表中添加一列,并添加数据

场景:我们使用paypal express,在控制器重定向到paypal之前,我真的想在sales_flat_quote中添加一个字段(如果还没有的话),称为paypal_status - 并设置值= 1(我们将致电它,发送到PayPal)。

退货时,我想将其更新为2或3(返回和挂起的交易,或返回和捕获的交易)。

因此,有两件事情我需要知道怎么做:

  1. 有类似$db->addColumn('paypal_status')若没存在,它只会增加,而

  2. UPDATE sales_flat_quote SET paypal_status = 1 WHERE entity_id = {whatever}

这将在... Paypal_Express类中。

回答

1

打开数据库并激发此SQL:更改表sales_flat_quote添加paypal_status tinyint(1)NOT NULL DEFAULT 1;

或者,您可以在自定义模块的SQL文件(位于CompanyName \ MyModuleName \ sql \ companyname_modulename_setup)中编写以下内容。这个文件只会执行一次,这是安装模块的第一次。那时你的自定义列不会在数据库中,所以它会创建一个。

$installer = $this; 
$installer->startSetup(); 
$installer->run("ALTER TABLE `{$installer->getTable('sales/quote')}` ADD `paypal_status` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'My Custom Paypal Status';"); 
$installer->endSetup(); 

清除所有的cahces。

要保存的数据:

$myValue = 2; 
Mage::getSingleton("checkout/cart")->getQuote()->setPaypalStatus($myValue)->save(); 

法师:: getSingleton( “结帐/购物车”) - >为getQuote()会给你目前的报价。

+0

好的,这非常简单。我知道setPaypalStatus()方法是那些“神奇的”PHP __call方法之一(http://php.net/manual/en/language.oop5.overloading.php)。为了读者的利益 –

+0

我也想添加一个列,如果它不存在,这个链接是有帮助的: http://www.magento60s.com/magento/add-column-if- not-exist-2615.html –

+0

如果不存在,可以检查这些链接以添加列:http:// stackoverflow。com/questions/24571611/mysql-alter-table-if-column-not-exist –

0

在CompanyName \ MyModuleName \ sql \ companyname_modulename_setup的sql文件中,为了创建该列,请复制以下代码。

$installer = $this; 
$installer->startSetup(); 
$installer->getConnection() 
->addColumn($installer->getTable('sales/quote'), 
    'paypal_status', 
    array(
     'type' => Varien_Db_Ddl_Table::TYPE_INTEGER, 
     'nullable' => true, 
     'comment' => 'Paypal Status', 
    ) 
); 
$installer->endSetup(); 

注销并登录,并刷新magento缓存以将列添加到表中。

Express Checkout控制器在app/code/core/Mage/Paypal/Controller/Express/Abstract.php中。如果您想在控制器重定向到paypal之前添加一个字段,您可以修改_initCheckout()方法,如下所示:

protected function _initCheckout() 
$quote = $this->_getQuote(); 
    if (!$quote->hasItems() || $quote->getHasError()) { 
     $this->getResponse()->setHeader('HTTP/1.1','403 Forbidden'); 
     Mage::throwException(Mage::helper('paypal')->__('Unable to initialize Express Checkout.')); 
    } 
$quote->setPaymentStatus(1); // Here is your change 
$this->_checkout = Mage::getSingleton($this->_checkoutType, array(
     'config' => $this->_config, 
     'quote' => $quote, 
    )); 
return $this->_checkout; 
} 
+0

哈维尔,这是一个很好的答案,我实际上要测试这个代码和@Reena Parekh的代码。谢谢 –