我最近一直在做一个扩展。但是,我遇到了一个障碍,我想知道是否应该重新安装 Magento。我遇到的问题发生在昨天。我相信我已经追根溯源,但我不知道如何解决。当我尝试提交订单时,在第一个订单下达后,出现以下错误:
There was an error processing your order. Please contact us or try
again later.exception 'PDOException' with message 'SQLSTATE[23000]:
Integrity constraint violation: 1062 Duplicate entry '' for key
'UNQ_INCREMENT_ID'' in
/Users/jmax/Documents/websites/max_magento/lib/Zend/Db/Statement/Pdo.php:228
Stack trace:
#0 /Users/jmax/Documents/websites/max_magento/lib/Zend/Db/Statement/Pdo.php(228): PDOStatement->execute(Array)
#1 /Users/jmax/Documents/websites/max_magento/lib/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array)
#2 /Users/jmax/Documents/websites/max_magento/lib/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(Array)
#3 /Users/jmax/Documents/websites/max_magento/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('INSERT INTO `sa...', Array)
#4 /Users/jmax/Documents/websites/max_magento/lib/Varien/Db/Adapter/Pdo/Mysql.php(337): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO `sa...', Array)
#5 /Users/jmax/Documents/websites/max_magento/lib/Zend/Db/Adapter/Abstract.php(574): Varien_Db_Adapter_Pdo_Mysql->query('INSERT INTO `sa...', Array)
#6 /Users/jmax/Documents/websites/max_magento/app/code/core/Mage/Core/Model/Mysql4/Abstract.php(414): Zend_Db_Adapter_Abstract->insert('sales_flat_orde...', Array)
#7 /Users/jmax/Documents/websites/max_magento/app/code/core/Mage/Sales/Model/Mysql4/Order/Abstract.php(417): Mage_Core_Model_Mysql4_Abstract->save(Object(Mage_Sales_Model_Order))
#8 /Users/jmax/Documents/websites/max_magento/app/code/core/Mage/Core/Model/Abstract.php(318): Mage_Sales_Model_Mysql4_Order_Abstract->save(Object(Mage_Sales_Model_Order))
#9 /Users/jmax/Documents/websites/max_magento/app/code/core/Mage/Core/Model/Resource/Transaction.php(150): Mage_Core_Model_Abstract->save()
#10 /Users/jmax/Documents/websites/max_magento/app/code/core/Mage/Sales/Model/Service/Quote.php(183): Mage_Core_Model_Resource_Transaction->save()
#11 /Users/jmax/Documents/websites/max_magento/app/code/core/Mage/Sales/Model/Service/Quote.php(238): Mage_Sales_Model_Service_Quote->submitOrder()
#12 /Users/jmax/Documents/websites/max_magento/app/code/core/Mage/Checkout/Model/Type/Onepage.php(745): Mage_Sales_Model_Service_Quote->submitAll()
#13 /Users/jmax/Documents/websites/max_magento/app/code/core/Mage/Checkout/controllers/OnepageController.php(499): Mage_Checkout_Model_Type_Onepage->saveOrder()
#14 /Users/jmax/Documents/websites/max_magento/app/code/core/Mage/Core/Controller/Varien/Action.php(420): Mage_Checkout_OnepageController->saveOrderAction()
#15 /Users/jmax/Documents/websites/max_magento/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(253): Mage_Core_Controller_Varien_Action->dispatch('saveOrder')
#16 /Users/jmax/Documents/websites/max_magento/app/code/core/Mage/Core/Controller/Varien/Front.php(176): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#17 /Users/jmax/Documents/websites/max_magento/app/code/core/Mage/Core/Model/App.php(340): Mage_Core_Controller_Varien_Front->dispatch()
#18 /Users/jmax/Documents/websites/max_magento/app/Mage.php(627): Mage_Core_Model_App->run(Array)
#19 /Users/jmax/Documents/websites/max_magento/index.php(80): Mage::run('', 'store')
#20 {main}
我尝试的第一件事:我完全禁用了我的扩展程序。所以,这不是我的扩展名,但也许它导致数据库发生了一些变化,从而导致了这种情况。我一直在使用正确的编码方法开发我的扩展(不修改核心文件,并且尽可能地扩展而不是覆盖)。
看起来好像订单的增量ID没有被设置!我回到 Mage_Eav_Model_Entity_Type -> fetchNewIncrementId(第 141 行),发现它在发现没有增量模型后在第 145 行返回 void
:
144: if (!$this->getIncrementModel()) {
145: return false;
146: }
而且,这是导致问题的 SQL 查询(显然它不是递增 id):
INSERT INTO `sales_flat_order` (`coupon_code`, `protect_code`, `shipping_description`,
`is_virtual`, `store_id`, `customer_id`, `base_discount_amount`, `base_grand_total`,
`base_shipping_amount`, `base_shipping_tax_amount`, `base_subtotal`, `base_tax_amount`,
`base_to_global_rate`, `base_to_order_rate`, `discount_amount`, `grand_total`,
`shipping_amount`, `shipping_tax_amount`, `store_to_base_rate`, `store_to_order_rate`,
`subtotal`, `tax_amount`, `total_qty_ordered`, `customer_is_guest`, `customer_note_notify`,
`customer_group_id`, `gift_message_id`, `quote_id`, `base_shipping_discount_amount`,
`base_subtotal_incl_tax`, `shipping_discount_amount`, `subtotal_incl_tax`, `weight`,
`customer_dob`, `increment_id`, `applied_rule_ids`, `base_currency_code`, `customer_email`,
`customer_firstname`, `customer_lastname`, `customer_middlename`, `customer_prefix`,
`customer_suffix`, `customer_taxvat`, `discount_description`, `global_currency_code`,
`order_currency_code`, `remote_ip`, `shipping_method`, `store_currency_code`, `store_name`,
`x_forwarded_for`, `customer_note`, `created_at`, `updated_at`, `total_item_count`,
`customer_gender`, `hidden_tax_amount`, `base_hidden_tax_amount`, `shipping_hidden_tax_amount`,
`base_shipping_hidden_tax_amount`, `shipping_incl_tax`, `base_shipping_incl_tax`) VALUES (NULL,
'aa53a6', 'Flat Rate - Fixed', '0', '1', '4', '0', '55', '5', '0', '50', '0', '1', '1', '0',
'55', '5', '0', '1', '1', '50', '0', '1', '0', '1', '1', NULL, '38', '0', '50', '0', '50',
'1', NULL, '', '', 'USD', 'email@gmail.com', 'J', 'Max', NULL, NULL, NULL, NULL, '', 'USD',
'USD', '127.0.0.1', 'flatrate_flatrate', 'USD',
'Main Website\nMain Website Store\nDefault Store View', NULL, NULL, '2011-07-19 15:23:28',
'2011-07-19 15:23:28', '1', NULL, '0', '0', '0', '0', '5', '5')
我可以提供任何其他信息来帮助找到解决方案吗?非常感谢!
JMax
最佳答案
您是否向销售/订单模型添加了任何属性?在那里,如果您在添加属性 sales/order 时没有指定增量模型,将会丢失它的增量模型。即使您再次关闭扩展程序,这也会保留。
$installer->installEntities(
'order' => array(
'entity_model' => 'order',
'table' => 'sales/order',
'increment_model' => 'eav/entity_increment_numeric', //<-- This is important and might have caused the trouble!!!
'increment_per_store' => true,
'backend_prefix' => 'sales_entity/order_attribute_backend',
'attributes' => array(
'my_new_attribute' => array(
'label' => 'Omx Gift Certificates',
'type' => 'text',
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
'visible' => true,
'required' => false,
'user_defined' => true,
),
)
);
如果这是来源,您可以执行以下操作:
从 sales_flat_order 表中删除添加的列(在本例中为:my_new_attribute
)并重新运行扩展的安装程序(当然使用指定的 increment_model...)。
j.
关于php - 提交订单时Magento没有增加ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6750515/