запрос списка заказов magento - PullRequest
2 голосов
/ 27 февраля 2011

Я хочу выбрать список всех заказов в Magento.

Это необходимо для того, чтобы я показал список всех заказов из magento в другом приложении PHP, над которым я сейчас работаю.

Также может кто-нибудь написать мне код, используя соглашения Magento, такие как Mage::

Я использую версию Magento 1.4.2.

Спасибо,
Марк

Ответы [ 3 ]

10 голосов
/ 28 февраля 2011

Этот код использует «путь Magento» и осуществляет доступ к данным через слой модели, который изолирует вас от изменений в структуре таблицы (например, квартира против EAV). Создайте новый файл PHP, содержащий этот код скелета, в корне вашей установки Magento (если где-либо еще обновите путь для первого оператора require).

Это дает вам несколько примеров того, как добавить атрибуты в коллекцию, вы должны быть в состоянии следовать за примерами, чтобы добавить больше, если требуется. Он показывает, как фильтровать по атрибутам и сортировать по атрибутам. Примеры также для отображения полей, которые вам нужны.

НТН,
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;
5 голосов
/ 28 февраля 2011

Попробуйте это:

select * from sales_flat_order;

Это информация на уровне заголовка.Если вам требуется информация о позиции / более подробная информация, вы можете использовать что-то вроде следующего соединения:

select e.*,sfoi.* from sales_flat_order e
left join sales_flat_order_item sfoi on (e.entity_id=sfoi.order_id)

Теперь это будет дублировать (декартово произведение) всю информацию заголовка вместе со строкойИнформация о предмете.Если вам нужно что-то еще, дайте мне знать, я мастер в Magento EAV SQL:)

0 голосов
/ 01 февраля 2013

Немного поздно, но это может быть полезно (протестировано в Magento CE 1.7.0.2).Код сильно комментируется для руководства.

<?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
    }
}
?>

Надеюсь, что это кому-то поможет!

...