SQL, чтобы получить элементы заказа от Magento? - PullRequest
0 голосов
/ 20 сентября 2018

Мне нужно получить список заказанных физических предметов для отправки из базы данных.Список должен состоять из имени, артикула, количества, цены, веса и размеров.

Как мы можем это сделать, не используя собственные компоненты инфраструктуры Magento.

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

$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', чтобы получить только простыепродукты, они не содержат цены.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Если существует настраиваемый продукт, в котором имеется несколько простых продуктов с одинаковой ценой, тогда цена будет сохранена только в настраиваемом продукте.Таким образом, вы не должны использовать фильтр «простой продукт».Попробуйте выполнить запрос, приведенный ниже:

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 

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

0 голосов
/ 23 сентября 2018

Попробуйте:

SELECT ord_items.name, ord_items.sku, ord_items.qty_ordered, ord_items.weight, ord_items.price
FROM sales_flat_order_item as ord_items
WHERE ord_items.product_type = 'configurable' OR ord_items.product_type = 'bundle';

Обратите внимание, что для Magento SKU является идентификатором, а в таблицах sales_flat этот атрибут используется для связывания комплекта или настраиваемых продуктов с его простым.Родительский продукт (настраиваемый или пакетный) содержит всю информацию, которая вам нужна в вашем запросе.

* Этот запрос предполагает, что в этом магазине вы продаете только пакет или настраиваемые продукты.

...