首页 > 解决方案 > 数量大于1时如何循环?

问题描述

我正在开发一个 API 来从订单中获取商品详细信息

我的数据库中的记录是这样的,

| order_id    | item_id | oi_qty
|MTASTO-EVHS5J|7        |2  
|MTASTO-EVHS5J|3        |1

我的模型来获取这样的数据

  public function get_order_items($order_id) {

    $this->db
            ->select('i.item_name as productTitle, oi.oi_engrave_text as notes, oi.oi_engrave_text as type')
            ->from('order_items oi')
            ->join('item i', 'oi.item_id = i.item_id', 'left')
            ->join('item_size s', 'oi.size_id = s.size_id', 'left')
            ->where('oi.order_id', $order_id);
    $query = $this->db->get();

    return $query;
  }

在我的控制器中这样做,

//order item
$nested_array = $this->inventory_api->get_order_items($order_id)->result_array();

像这样制作json,

//data response
        header('Content-Type: application/json; charset=utf-8');

        $default = array(
                "items"=> $nested_array
            ]

        );

        echo json_encode($default);;    

json中的结果是这样的,

"items": [
            {
                "productTitle": "Alor",
                "notes": "costum",
                "type": "costum"
            },
            {
                "productTitle": "Rakai Maple",
                "notes": "costum",
                "type": "costum"
            }
        ]

结果中只有 1 个 Alor 项目,而在 oi_qty 中有 2 个项目

问题是如果 oi_qty 大于 1,我如何循环该项目?

标签: phpmysql

解决方案


在您的基地中,即使数量是两个,您也只能为每个产品输入一个条目。因此,当您在查询中询问条目时,它会逐行返回。

我认为您应该在查询中使用数量:SELECT i.oi_qty as quantity ...

然后像这样解析结果

foreach($nested_array as $item)
{
  for($i =0 ; $i < $item['quantity']; $i++)
  {
    $finalArray[] = [
      'name' => $item['name'],,
      'note' => $item['note'],
      ...
    ];
  }
}

推荐阅读