首页 > 解决方案 > SQL 从 Magento 获取订单项目?

问题描述

我需要从数据库中获取要运送的已订购物理物品的列表。清单需要包括名称、sku、数量、价格、重量和尺寸。

如果不使用 Magento 自己的框架组件,我们怎么能做到这一点。

问题在于,如果产品包含选项,它会按不同的产品类型(简单、捆绑、可配置等)和不同的产品 ID 在表中多次出现。

$items = array();

$sql = (
  "SELECT oi.name, oi.sku, oi.qty_ordered, oi.price, oi.weight
  FROM {$db->prefix}sales_flat_order_item oi
  WHERE oi.order_id = ". (int)$order_entity_id .";"
);

if ($result = $mysqli->query($sql)) {

  while ($row = $result->fetch_assoc()) {

    $items[] = [
      'name'                   => $row['name'],
      'sku'                    => $row['sku'],
      'quantity'               => (float)$row['qty_ordered'],
      'unit_price'             => (float)$row['price'],
      'unit_weight'            => (float)$row['weight'],
      //'unit_length'            => (float)$row['length'], // Not present?
      //'unit_width'             => (float)$row['width'], // Not present?
      //'unit_height'            => (float)$row['height'], // Not present?
    ];
  }

  $result->close();
}

如果我通过过滤器AND product_type = 'simple'只获取简单的产品,它们不包含价格。

标签: phpmysqlmagentomagento-1.9magento2

解决方案


如果有一个可配置产品有多个相同价格的简单产品,则价格将只保存在可配置产品中。所以你不应该使用“简单产品”过滤器。尝试以下查询,

SELECT orders.increment_id AS increment_id,
       orders.status AS order_status,
       orders.customer_email AS customer_email,
       orders.coupon_code AS coupon_code,
       items.name AS item_name,
       items.item_id AS order_item_id,
       items.sku AS item_sku,
       items.base_price AS item_base_price,
       items.price_incl_tax AS item_price,
       items.qty_ordered AS qty_ordered,
       items.product_id AS product_id,
       items.weight AS Weight
    FROM sales_flat_order_item AS items
    LEFT JOIN sales_flat_order AS orders
    ON items.order_id = orders.entity_id 
  WHERE 
    orders.entity_id = 18229 

这为您提供了简单和可配置产品的详细信息,您可以使用条件(if / else)来归档内容。


推荐阅读