douyuefu1372
2011-07-19 16:18
浏览 57
已采纳

Magento在提交订单时没有增量ID

I've been working on an extension recently. However, I just ran into a snag, and I am wondering if I should reinstall Magento. The problem that I am running into happened yesterday. I believe that I have traced it to the root, but I don't know how to fix it. When I attempt to submit an order, after the first one has been placed, I get the following error:

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}

First thing I tried: I completely disabled my extension. So, it is not my extension, but maybe it caused some change in the database that caused that. I have been developing my extension using the proper coding methods (not modifying core files, and extending as opposed to overriding as much as possible).

It appears as if the order's increment id is not being set! I went back to Mage_Eav_Model_Entity_Type -> fetchNewIncrementId (line 141), and found that it returns void on line 145 after finding there is not increment model:

144: if (!$this->getIncrementModel()) {
145:    return false;
146: }

And, here is the SQL query that causes the problem (obviously it is not increment 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
Main Website Store
Default Store View', NULL, NULL, '2011-07-19 15:23:28', 
'2011-07-19 15:23:28', '1', NULL, '0', '0', '0', '0', '5', '5')

Is there any other information that I can provide to help come to a solution? Thank you SO much!

JMax

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • duanjiaopi8218 2011-09-08 09:16
    已采纳

    Did you add any attributes to the sales/order model? In that, if you do not specifiy the increment model when adding the attribute sales/order will lose it's increment model. This will stay even if you switch off your extension again.

    $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,
            ),
        )
    );
    

    If that is the source you can do the following: Erase the added columns (in this case: my_new_attribute) from the sales_flat_order table and rerun the installer of your extension (with specified increment_model of course...).

    j.

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • doudengshen5591 2011-07-19 17:03

    I'm not sure this should be an answer but I need some space and this post may even be helpfull so I'm posting it as an answer;

    Since the $this->getIncrementModel() fails I think you should check that your database is OK. I did some queries on one of my installed magentos and here are the results:

    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)
    

    Please do the same selects on your databases and let's compare the results. I'd reinstall the magento anyway, but first you should find and fix the bug that caused the data corruption (if there is any).

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题