如何使用Laravel、MySql、JSON按不同城市对订单进行分组

如何使用Laravel、MySql、JSON按不同城市对订单进行分组,mysql,json,laravel,laravel-5,e-commerce,Mysql,Json,Laravel,Laravel 5,E Commerce,正在尝试构建laravel项目订单相关信息的报告结果。但在特定的数据结构上寻找解决方案却举步维艰 我的请求: // Date Ranges $fromDate = $this->request->fromDate; $toDate = $this->request->toDate; 因此,结果应该在日期范围内 我的订单表: order_id order_addresses grand_total -------------------------------

正在尝试构建laravel项目订单相关信息的报告结果。但在特定的数据结构上寻找解决方案却举步维艰

我的请求:

// Date Ranges
$fromDate = $this->request->fromDate;
$toDate = $this->request->toDate;
因此,结果应该在日期范围内

我的订单表:

order_id    order_addresses    grand_total
------------------------------------------
  1           JSON DATA          3,000.00
  2           JSON DATA          2,000.00
  3           JSON DATA          1,500.00
因此,我的
JSON数据
如下所示:

{
   "delivery_address":{
      "House":"Offline House",
      "Street":"Offline Road",
      "Area":"Offline Area",
      "PostCode":"1230",
      "City":"City1",
      "Country":"Country1",
      "ContactPerson":"Offline User",
      "ContactNumber":"01XXXXXXXX"
   }
}
我只想得到如下答复:

    {
        "orders": 3, // How many orders are there in that particular city
        "totals": "5,500.00", // Total how much the cost of orders in that city
        "groupby": "City1",
    },
    {
        "orders": 5,
        "totals": "7,500.00", 
        "groupby": "City2",
    },
    ...,
    ...
我正在寻找一个在laravel和MySQL中使用查询生成器的解决方案

这是一个现有的项目,所以我不能真正改变它的结构。关于如何从JSON数据中提取城市的任何建议,这些数据与订单标识以及总计和所有相关。 我只需要订单号,我认为这是城市的智慧,然后我就可以按照我喜欢的方式组织我的结果,以实现最终结果。

如果这里有什么不明白的地方,请告诉我,以便我能说清楚


提前谢谢

我建议使用Laravel收集函数对获取的数据进行分组

订单模式

类顺序扩展模型{
//这将把数据强制转换为本机类型。
//因此,将_地址json字符串排序到数组
受保护的$casts=[
“订单地址”=>“数组”,
];
}
控制器功能


//像往常一样从数据库中获取订单
//不考虑分组。
//以你的条件。
//例如,我将简单地使用all()。
$orders=Order::all();
//按城市划分的第一组
//然后映射以获得所需的结果。
$groupedOrders=$orders->groupBy(函数($order){
//因为我们将它添加到模型中的casts数组中
//laravel将自动将json字符串转换为数组。
//所以现在order_地址是一个数组。
返回$order->order_地址['City'];
})
->映射(函数($groupedOrders,$groupName){
返回[
“订单”=>$groupedOrders->count(),
“总计”=>$groupedOrders->sum('grand_total'),
“groupby”=>$groupName,
];
});