php - consulta de lista de pedidos magento
collections magento-1.4 (3)
Quiero seleccionar la lista de todos los pedidos en Magento.
Esto es necesario para mostrar la lista de todas las órdenes de magento en otra aplicación PHP en la que estoy trabajando actualmente.
También puede alguien escribirme el código usando las convenciones de Magento como Mage::
Estoy usando la versión de Magento 1.4.2.
Gracias,
marca
Este código utiliza el "modo Magento" y accede a los datos a través de la capa Modelo que lo aísla de los cambios en la estructura de la tabla (por ejemplo, plana frente a EAV). Cree un nuevo archivo PHP que contenga este código de esqueleto en la raíz de su instalación de Magento (si en algún otro lugar actualiza la ruta para la primera declaración de require
).
Esto le da algunos ejemplos de cómo agregar atributos a la colección, debería poder seguir los ejemplos para agregar más si es necesario. Le muestra cómo filtrar por atributos y ordenar por atributos. Ejemplos también para repetir los campos que necesita.
HTH,
JD
require_once ''app/Mage.php'';
umask(0);
Mage::app(''default'');
$orders = Mage::getResourceModel(''sales/order_collection'')
->addAttributeToSelect(''*'')
->joinAttribute(''billing_firstname'', ''order_address/firstname'', ''billing_address_id'', null, ''left'')
->joinAttribute(''billing_lastname'', ''order_address/lastname'', ''billing_address_id'', null, ''left'')
->joinAttribute(''billing_street'', ''order_address/street'', ''billing_address_id'', null, ''left'')
->joinAttribute(''billing_company'', ''order_address/company'', ''billing_address_id'', null, ''left'')
->joinAttribute(''billing_city'', ''order_address/city'', ''billing_address_id'', null, ''left'')
->joinAttribute(''billing_region'', ''order_address/region'', ''billing_address_id'', null, ''left'')
->joinAttribute(''billing_country'', ''order_address/country_id'', ''billing_address_id'', null, ''left'')
->joinAttribute(''billing_postcode'', ''order_address/postcode'', ''billing_address_id'', null, ''left'')
->joinAttribute(''billing_telephone'', ''order_address/telephone'', ''billing_address_id'', null, ''left'')
->joinAttribute(''billing_fax'', ''order_address/fax'', ''billing_address_id'', null, ''left'')
->joinAttribute(''shipping_firstname'', ''order_address/firstname'', ''shipping_address_id'', null, ''left'')
->joinAttribute(''shipping_lastname'', ''order_address/lastname'', ''shipping_address_id'', null, ''left'')
->joinAttribute(''shipping_street'', ''order_address/street'', ''shipping_address_id'', null, ''left'')
->joinAttribute(''shipping_company'', ''order_address/company'', ''shipping_address_id'', null, ''left'')
->joinAttribute(''shipping_city'', ''order_address/city'', ''shipping_address_id'', null, ''left'')
->joinAttribute(''shipping_region'', ''order_address/region'', ''shipping_address_id'', null, ''left'')
->joinAttribute(''shipping_country'', ''order_address/country_id'', ''shipping_address_id'', null, ''left'')
->joinAttribute(''shipping_postcode'', ''order_address/postcode'', ''shipping_address_id'', null, ''left'')
->joinAttribute(''shipping_telephone'', ''order_address/telephone'', ''shipping_address_id'', null, ''left'')
->joinAttribute(''shipping_fax'', ''order_address/fax'', ''shipping_address_id'', null, ''left'')
->addFieldToFilter(''status'', array("in" => array(
''complete'',
''closed'')
))
->addAttributeToFilter(''store_id'', Mage::app()->getStore()->getId())
->addAttributeToSort(''created_at'', ''asc'')
->load();
foreach($orders as $order):
echo $order->getIncrementId().''<br/>'';
echo $order->getShippingTelephone().''<br/>'';
endforeach;
Prueba esto:
select * from sales_flat_order;
Esa es información de nivel de encabezado. Si necesita información de línea / información más detallada, puede usar algo como la siguiente combinación:
select e.*,sfoi.* from sales_flat_order e
left join sales_flat_order_item sfoi on (e.entity_id=sfoi.order_id)
Ahora, esto va a duplicar (producto cartesiano) toda la información del encabezado junto con la información del artículo de línea. Si necesita algo más, hágamelo saber, soy un maestro en Magento EAV SQL :)
Un poco tarde, pero esto podría ser útil (probado en Magento CE 1.7.0.2). El código se comenta fuertemente para una guía.
<?php
// include the core code we are going to use
require_once(''app/Mage.php'');
umask (0);
Mage::app(''default'');
// resources
$resource = Mage::getSingleton(''core/resource'');
// db access
$db_read = $resource->getConnection(''core_read'');
$db_write = $resource->getConnection(''core_write'');
// support table prefix if one is being used
$table_prefix = Mage::getConfig()->getTablePrefix();
// count the orders
$order_num = $db_read->fetchOne("SELECT COUNT(*) AS num FROM {$table_prefix}sales_flat_order WHERE status = ''pending''");
// get an array of the orders
$orders = $db_read->fetchAll("SELECT sales.* FROM {$table_prefix}sales_flat_order AS sales WHERE sales.status = ''pending''");
// start iterating through the orders
for($i=0; $i < intval($order_num); $i++) {
// order id
$orderid = $orders[$i][''entity_id''];
// shipping address
$order_details = Mage::getModel(''sales/order'')->load($orderid);
$shippingAddress = $order_details->getShippingAddress();
// use like so
$shippingAddress->getPrefix());
$shippingAddress->getFirstname();
$shippingAddress->getLastname();
$shippingAddress->getCompany();
$shippingAddress->getEmail();
$shippingAddress->getTelephone();
$shippingAddress->getStreetFull();
// billing address
$order_details = Mage::getModel(''sales/order'')->load($orderid);
$billingAddress = $order_details->getBillingAddress();
// use like so
$billingAddress->getPrefix());
$billingAddress->getFirstname();
$billingAddress->getLastname();
$billingAddress->getCompany();
$billingAddress->getEmail();
$billingAddress->getTelephone();
$billingAddress->getStreetFull();
// and if you want order items, do the following
$items = $db_read->fetchAll("SELECT
items.order_id AS orderid,
items.item_id AS itemid,
orders.total_item_count AS total_items_in_order,
items.quote_item_id AS quoteid,
items.created_at AS orderdate,
items.product_type,
items.sku AS itemcode,
items.name AS itemname,
items.price_incl_tax AS itemprice,
items.tax_amount AS itemtax,
items.discount_amount AS discount,
items.qty_ordered AS qty_ordered,
items.qty_shipped AS qty_shipped,
address.email AS email,
address.prefix AS title,
address.firstname AS firstname,
address.lastname AS lastname,
address.street AS address,
address.city AS city,
address.region AS region,
address.country_id AS country,
address.postcode AS postcode,
address.telephone AS telephone
FROM {$table_prefix}sales_flat_order AS orders
JOIN {$table_prefix}sales_flat_order_item AS items
ON items.order_id = orders.entity_id
LEFT JOIN {$table_prefix}sales_flat_order_address AS address
ON orders.entity_id = address.parent_id
WHERE
items.order_id = $orderid
AND address.address_type = ''shipping''
AND orders.status = ''pending''
");
foreach ($items AS $item) {
echo $item[''itemid''];
// blah blah blah
}
}
?>
Espero que ayude a alguien!