Php 提交订单时没有增量id
我最近一直在做一个扩展。然而,我刚刚遇到了一个障碍,我想知道是否应该重新安装Magento。我遇到的问题发生在昨天。我相信我已经找到了它的根源,但我不知道如何修复它。当我尝试提交订单时,在下了第一个订单后,我会出现以下错误:Php 提交订单时没有增量id,php,mysql,magento,increment,Php,Mysql,Magento,Increment,我最近一直在做一个扩展。然而,我刚刚遇到了一个障碍,我想知道是否应该重新安装Magento。我遇到的问题发生在昨天。我相信我已经找到了它的根源,但我不知道如何修复它。当我尝试提交订单时,在下了第一个订单后,我会出现以下错误: There was an error processing your order. Please contact us or try again later.exception 'PDOException' with message 'SQLSTATE[23000]:
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):
我是否可以提供任何其他信息来帮助找到解决方案?非常感谢你
JMax我不确定这是否应该是一个答案,但我需要一些空间,这篇文章甚至可能有帮助,所以我将它作为一个答案发布 由于$this->getIncrementModel()失败,我认为您应该检查数据库是否正常。 我对我安装的一个magentos进行了一些查询,结果如下:
mysql> select * from eav_entity_store;
+-----------------+----------------+----------+------------------+-------------------+
| entity_store_id | entity_type_id | store_id | increment_prefix | increment_last_id |
+-----------------+----------------+----------+------------------+-------------------+
| 1 | 1 | 0 | 0 | 000008430 |
| 2 | 11 | 1 | 1 | 100017253 |
| 3 | 16 | 1 | 1 | 100015639 |
| 4 | 19 | 1 | 1 | 100003448 |
| 5 | 23 | 1 | 1 | 100000676 |
| 6 | 11 | 3 | 3 | 300000088 |
| 7 | 19 | 3 | 3 | 300000019 |
| 8 | 16 | 3 | 3 | 300000072 |
| 9 | 11 | 4 | 4 | 400000004 |
| 10 | 11 | 5 | 5 | 500000102 |
| 11 | 16 | 5 | 5 | 500000049 |
| 12 | 11 | 7 | 7 | 700000001 |
| 13 | 16 | 7 | 7 | 700000001 |
| 14 | 23 | 3 | 3 | 300000003 |
| 15 | 19 | 5 | 5 | 500000006 |
+-----------------+----------------+----------+------------------+-------------------+
15 rows in set (0.00 sec)
mysql> select entity_type_id, entity_type_code, entity_model from eav_entity_type;
+----------------+----------------------+--------------------------------+
| entity_type_id | entity_type_code | entity_model |
+----------------+----------------------+--------------------------------+
| 1 | customer | customer/customer |
| 2 | customer_address | customer/address |
| 3 | catalog_category | catalog/category |
| 4 | catalog_product | catalog/product |
| 5 | quote | sales/quote |
| 6 | quote_item | sales/quote_item |
| 7 | quote_address | sales/quote_address |
| 8 | quote_address_item | sales/quote_address_item |
| 9 | quote_address_rate | sales/quote_address_rate |
| 10 | quote_payment | sales/quote_payment |
| 11 | order | sales/order |
| 12 | order_address | sales/order_address |
| 13 | order_item | sales/order_item |
| 14 | order_payment | sales/order_payment |
| 15 | order_status_history | sales/order_status_history |
| 16 | invoice | sales/order_invoice |
| 17 | invoice_item | sales/order_invoice_item |
| 18 | invoice_comment | sales/order_invoice_comment |
| 19 | shipment | sales/order_shipment |
| 20 | shipment_item | sales/order_shipment_item |
| 21 | shipment_comment | sales/order_shipment_comment |
| 22 | shipment_track | sales/order_shipment_track |
| 23 | creditmemo | sales/order_creditmemo |
| 24 | creditmemo_item | sales/order_creditmemo_item |
| 25 | creditmemo_comment | sales/order_creditmemo_comment |
+----------------+----------------------+--------------------------------+
25 rows in set (0.00 sec)
请在您的数据库上执行相同的选择,让我们比较结果。无论如何,我都会重新安装magento,但首先你应该找到并修复导致数据损坏的bug(如果有)。我不确定这是否应该是一个答案,但我需要一些空间,这篇文章甚至可能有帮助,所以我将其作为答案发布 由于$this->getIncrementModel()失败,我认为您应该检查数据库是否正常。 我对我安装的一个magentos进行了一些查询,结果如下:
mysql> select * from eav_entity_store;
+-----------------+----------------+----------+------------------+-------------------+
| entity_store_id | entity_type_id | store_id | increment_prefix | increment_last_id |
+-----------------+----------------+----------+------------------+-------------------+
| 1 | 1 | 0 | 0 | 000008430 |
| 2 | 11 | 1 | 1 | 100017253 |
| 3 | 16 | 1 | 1 | 100015639 |
| 4 | 19 | 1 | 1 | 100003448 |
| 5 | 23 | 1 | 1 | 100000676 |
| 6 | 11 | 3 | 3 | 300000088 |
| 7 | 19 | 3 | 3 | 300000019 |
| 8 | 16 | 3 | 3 | 300000072 |
| 9 | 11 | 4 | 4 | 400000004 |
| 10 | 11 | 5 | 5 | 500000102 |
| 11 | 16 | 5 | 5 | 500000049 |
| 12 | 11 | 7 | 7 | 700000001 |
| 13 | 16 | 7 | 7 | 700000001 |
| 14 | 23 | 3 | 3 | 300000003 |
| 15 | 19 | 5 | 5 | 500000006 |
+-----------------+----------------+----------+------------------+-------------------+
15 rows in set (0.00 sec)
mysql> select entity_type_id, entity_type_code, entity_model from eav_entity_type;
+----------------+----------------------+--------------------------------+
| entity_type_id | entity_type_code | entity_model |
+----------------+----------------------+--------------------------------+
| 1 | customer | customer/customer |
| 2 | customer_address | customer/address |
| 3 | catalog_category | catalog/category |
| 4 | catalog_product | catalog/product |
| 5 | quote | sales/quote |
| 6 | quote_item | sales/quote_item |
| 7 | quote_address | sales/quote_address |
| 8 | quote_address_item | sales/quote_address_item |
| 9 | quote_address_rate | sales/quote_address_rate |
| 10 | quote_payment | sales/quote_payment |
| 11 | order | sales/order |
| 12 | order_address | sales/order_address |
| 13 | order_item | sales/order_item |
| 14 | order_payment | sales/order_payment |
| 15 | order_status_history | sales/order_status_history |
| 16 | invoice | sales/order_invoice |
| 17 | invoice_item | sales/order_invoice_item |
| 18 | invoice_comment | sales/order_invoice_comment |
| 19 | shipment | sales/order_shipment |
| 20 | shipment_item | sales/order_shipment_item |
| 21 | shipment_comment | sales/order_shipment_comment |
| 22 | shipment_track | sales/order_shipment_track |
| 23 | creditmemo | sales/order_creditmemo |
| 24 | creditmemo_item | sales/order_creditmemo_item |
| 25 | creditmemo_comment | sales/order_creditmemo_comment |
+----------------+----------------------+--------------------------------+
25 rows in set (0.00 sec)
请在您的数据库上执行相同的选择,让我们比较结果。无论如何,我都会重新安装magento,但首先您应该找到并修复导致数据损坏的错误(如果有)。您是否向销售/订单模型添加了任何属性?在这种情况下,如果在添加属性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,
),
)
);
$installer->installEntities(
“顺序”=>数组(
“实体_模型”=>“订单”,
'表'=>'销售/订单',
'increment\u model'=>'eav/entity\u increment\u numeric',//true,
'后端\前缀'=>'销售\实体/订单\属性\后端',
'属性'=>数组(
“我的新属性”=>数组(
“标签”=>“Omx礼券”,
'类型'=>'文本',
“全局”=>Mage\u Catalog\u Model\u Resource\u Eav\u Attribute::SCOPE\u global,
“可见”=>true,
“必需”=>false,
“用户定义的”=>true,
),
)
);
如果这是源代码,您可以执行以下操作:
从sales\u flat\u order表中删除添加的列(在本例中:my\u new\u属性
),然后重新运行扩展插件的安装程序(当然,使用指定的增量\u模型…)
j、 您是否向销售/订单模型添加了任何属性?在这种情况下,如果您在添加属性销售/订单时未指定增量模型,则其增量模型将丢失。即使您再次关闭扩展,该属性也将保持不变
$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,
),
)
);
$installer->installEntities(
“顺序”=>数组(
“实体_模型”=>“订单”,
'表'=>'销售/订单',
'increment\u model'=>'eav/entity\u increment\u numeric',//true,
'后端\前缀'=>'销售\实体/订单\属性\后端',
'属性'=>数组(
“我的新属性”=>数组(
“标签”=>“Omx礼券”,
'类型'=>'文本',
“全局”=>Mage\u Catalog\u Model\u Resource\u Eav\u Attribute::SCOPE\u global,
“可见”=>true,
“必需”=>false,
“用户定义的”=>true,
),
)
);
如果这是源代码,您可以执行以下操作:
从sales\u flat\u order表中删除添加的列(在本例中:my\u new\u属性
),然后重新运行扩展插件的安装程序(当然,使用指定的增量\u模型…)
j、 First order之所以成功,是因为没有唯一的密钥冲突。我的意思是,当您第一次下订单时,增量id也是“”,而且因为没有其他订单具有相同的增量id,所以它可以工作。如果您还没有启动存储,那么为什么不重新安装它呢?Jmax——如果它解决了您的问题,请接受答案lem.First order之所以成功,是因为没有唯一的密钥冲突。我的意思是,当您第一次下订单时,增量id也是“”,而且因为没有其他订单具有相同的增量id,所以它可以工作。如果您还没有启动存储,那么为什么不重新安装它呢?Jmax--如果它解决了您的问题,请接受答案。T谢谢你的帮助!!如果我再次损坏我的数据库,我会记住这一点。谢谢你的帮助!!如果我再次损坏我的数据库,我会记住这一点。您好。我刚刚发现我再次遇到同样的问题:)。您的代码修复了它。非常非常非常感谢。您好。我刚刚发现我再次遇到同样的问题:)。你的代码修复了它。非常非常感谢。