Confusão com o ID do pedido, o ID do incremento do pedido e não estou recebendo o ID do pedido como 20001201

28

Estou um pouco confuso com o ID do pedido e o ID do incremento do pedido. Alguém pode me ajudar a entender a diferença entre esses dois?

Eu tenho um observador para sales_order_place_after onde armazeno detalhes de vendas em uma tabela personalizada.

Mas com

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

Recebo os IDs dos pedidos como IDs normais, como 112 ou 113 ou 110, etc., não como 20001201

Então, qual é o ID do pedido real, 20001201 ou 112?

Preciso processar ainda mais os dados do pedido com base nessa identificação, uso 112, 113 etc. e funciona, mas preciso esclarecer isso.

Charlie
fonte

Respostas:

23

A diferença é:

  • order_id é o ID interno do pedido Magento
  • ID de incremento do pedido é o ID que você comunica ao seu cliente

Você pode facilmente carregar um pedido usando o order_id interno:

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

PS: Se você precisar, poderá obter facilmente o ID de incremento de um pedido carregado:

$order->getIncrementId();
mpaepper
fonte
1
Você quer dizer que o desenvolvedor usa ID interno e clientes e outro usa Increment_id?
8774 Charlie
Charlie, a postagem de Marius abaixo diferencia entre os dois, e a resposta do mpaepper mostra realmente o método chamado em um pedido para retornar a ID de incremento (que é efetivamente o 'ID do pedido' na visualização do administrador e no cliente).
Joshua Chavanne
26

id= o sales_flat_ordervalor da chave primária da tabela. Isso é incrementado automaticamente para cada pedido que você recebe em sua loja. Geralmente começa a partir de 1 e sobe.

increment id= um número "amigável" gerado antes de fazer o pedido. Ele deve ser exclusivo e é usado pelos métodos de pagamento online como referência (mas não apenas).
O ID de incremento por padrão é semelhante a este.

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

O número de zeros é variável. É adicionado usando str_padpara que o comprimento do ID de incremento sem o ID da loja seja 8.

Marius
fonte
Importe-se com a minha pergunta newbish, mas o primeiro byte não é um valor de prefixo da tabela EAV e não store_view_id?
someGuyOnTheWeb
4
@someGuyOnTheWeb. Bem ... sim, não. Tecnicamente, o prefixo (não apenas o primeiro byte ... trabalhei em projetos com prefixo de 2 dígitos) vem da tabela eav_entity_store. Mas, pela primeira ordem, não há registro nessa tabela. Então, um é criado. Quando é criado, o ID da loja é armazenado como increment_prefix. Veja como funciona no método Mage_Eav_Model_Entity_Type::fetchNewIncrementId. Começando com a linha: if (!$entityStoreConfig->getId()) {.
Marius
5

Um pedido de venda contém dois valores, entity_id (ID do pedido) e increment_id (ID de incremento do pedido). O entity_id é a chave primária na tabela de pedidos. Isso significa que você usa isso para carregar a entidade do pedido real. Ver abaixo

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

E passar

$order->getId(); ou $order->getEntityId();

O incremento_id é normalmente um número mais amigável que geralmente é específico do site / loja, ou seja, 20001201, os 2 à frente geralmente significam que é um pedido da sua segunda loja / site (não consigo lembrar qual). Isso geralmente é chamado de ID do pedido real. Você pode carregar uma entidade de pedido usando este increment_id

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

E passar

$order->getRealOrderId(); or $order->getIncrementId();
Danny Dev Nz
fonte
0

A order_id, que acredito ser a mesma entity_id, é a chave primária na tabela sales_order usada para unir todas as tabelas eav. É usado internamente no magento.

order_increment_id é usado para exibir para o cliente

TBI Infotech
fonte