Путаница с идентификатором заказа, идентификатором приращения заказа, и я не получаю идентификатор заказа как 20001201


28

Я немного запутался с идентификатором заказа и порядка приращение идентификатора , поэтому может любой мне помочь понять разницу между этими двумя?

У меня есть наблюдатель для sales_order_place_after, где я храню данные о продажах в пользовательской таблице.

Но с

$orderId = $observer->getEvent()->getOrder()->getId();

Я получаю идентификаторы заказа как обычные идентификаторы, такие как 112 или 113 или 110 и т. Д., А не 20001201

Так какой же реальный идентификатор заказа, 20001201 или 112?

Мне нужно дополнительно обработать данные заказа на основе этого идентификатора заказа, я использую 112, 113 и т. Д., И это работает, но мне нужно уточнить это.

Ответы:


23

Разница в следующем:

  • order_id - внутренний идентификатор заказа Magento
  • Идентификатор приращения заказа - это идентификатор, который вы сообщаете своему клиенту.

Вы можете легко загрузить заказ, используя внутренний order_id:

Mage::getModel('sales/order')->load($orderId);

PS: Если вам это нужно, вы можете легко получить ID приращения из загруженного заказа:

$order->getIncrementId();

1
Вы имеете в виду, что разработчик использует внутренний идентификатор, а клиенты и другое используют Increment_id?
Чарли

Чарли, пост Мариуса, приведенный ниже, проводит различие между ними, а в ответе mpaepper фактически отображается метод, который вызывается для заказа возврата идентификатора приращения (который фактически является «идентификатором заказа» в представлении администратора и для клиента).
Джошуа Шаванн

26

id= значение sales_flat_orderпервичного ключа таблицы. Это автоматически увеличивается для каждого заказа, который вы получаете в своем магазине. Обычно начинается с 1 и идет вверх.

increment id= «удобный» номер, сгенерированный до размещения заказа. Он должен быть уникальным и использоваться в качестве справочного метода оплаты через Интернет (но не только).
Идентификатор приращения по умолчанию выглядит следующим образом.

                  100000104
                  ||   || |
 store view id ---||   || |
                   |---||-|
                     |   |----- an increment number kept in the table eav_entity_store
    a lot of zeros --|

Количество нулей является переменным. Он добавляется с использованием str_padдлины идентификатора приращения без идентификатора магазина 8.


Помните мой вопрос для новичка, но не является ли 1-й байт значением префикса из таблицы EAV, а не store_view_id?
someGuyOnTheWeb

4
@someGuyOnTheWeb. Ну ... да нет. Технически префикс (а не только первый байт ... Я работал над проектами, которые имели двухзначный префикс) взят из таблицы eav_entity_store. Но для первого заказа в этой таблице нет записи. Итак, один создан. Когда он создан, идентификатор магазина сохраняется как increment_prefix. Посмотрите, как это работает в методе Mage_Eav_Model_Entity_Type::fetchNewIncrementId. Начиная с линии: if (!$entityStoreConfig->getId()) {.
Мариус

5

Заказ на продажу содержит два значения, entity_id (идентификатор заказа) и increment_id (идентификатор увеличения заказа). Entity_id - это первичный ключ в таблице заказов. Это означает, что вы используете это для загрузки фактического объекта заказа. Увидеть ниже

Mage::getModel("sales/order")->load($enityId);

И пройти

$order->getId(); или $order->getEntityId();

Increment_id обычно является более дружественным числом, которое часто зависит от веб-сайта / магазина, т. Е. 20001201 перед двумя часто означает, что это заказ из вашего второго магазина / веб-сайта (не помню, какой именно). Это часто называют реальным идентификатором заказа. Вы можете загрузить объект заказа, используя этот increment_id

Mage::getModel("sales/order")->loadByIncrementId($incrementId);

И пройти

$order->getRealOrderId(); or $order->getIncrementId();

0

order_id, Который я считаю , это так же , как entity_id, является первичным ключом в таблице sales_order , используемой для соединения всех таблиц EAV вместе. Это используется внутренне в magento.

order_increment_id используется для показа клиенту

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.