Squeak.ru - шаблоны программирования

Magento не имеет идентификатора приращения при отправке заказа

Я недавно работал над расширением. Однако я только что столкнулся с проблемой, и мне интересно, следует ли мне переустановить 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}

Первое, что я попробовал: я полностью отключил свое расширение. Итак, это не мое расширение, но, возможно, оно вызвало некоторые изменения в базе данных, которые вызвали это. Я разрабатывал свое расширение, используя правильные методы кодирования (не изменяя файлы ядра и расширяя, а не переопределяя, насколько это возможно).

Похоже, что идентификатор приращения заказа не установлен! Я вернулся к Mage_Eav_Model_Entity_Type -> fetchNewIncrementId (строка 141) и обнаружил, что он возвращает void в строке 145 после того, как обнаружил отсутствие модели приращения:

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

И вот SQL-запрос, который вызывает проблему (очевидно, это не инкрементный идентификатор):

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 protected]', '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')

Есть ли какая-либо другая информация, которую я могу предоставить, чтобы помочь найти решение? Большое спасибо!

JМакс.

19.07.2011

  • Первый порядок успешен, потому что нет нарушения уникального ключа. Я имею в виду, когда вы размещаете свой заказ в первый раз, increment_id также имеет значение '', и, поскольку других заказов с таким же increment_id нет, он работает. 19.07.2011
  • если вы еще не запустили магазин, то почему бы просто не установить его заново? 19.07.2011
  • Jmax - примите ответ, если он решил вашу проблему. 19.07.2011

Ответы:


1

Добавляли ли вы какие-либо атрибуты в модель продаж/заказов? При этом, если вы не укажете модель приращения при добавлении атрибута продажи/заказа, модель приращения потеряется. Это останется, даже если вы снова отключите расширение.

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

Если это источник, вы можете сделать следующее: Удалить добавленные столбцы (в данном случае: my_new_attribute) из таблицы sales_flat_order и перезапустить установщик вашего расширения (конечно, с указанной моделью приращения...).

j.

08.09.2011
  • Всем привет. Я только что обнаружил, что у меня снова та же проблема :). Ваш код исправил это. Большое, большое, большое спасибо. 08.09.2011

  • 2

    Я не уверен, что это должен быть ответ, но мне нужно немного места, и этот пост может быть даже полезен, поэтому я публикую его как ответ;

    Поскольку $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, но сначала вы должны найти и исправить ошибку, вызвавшую повреждение данных (если она есть).

    19.07.2011
  • Спасибо за помощь!! Я буду помнить об этом, если снова испорчу свою базу данных. 19.07.2011
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...