如内表结构和展示页面,在 Laravel 项目中怎么组织代码比较好? 
                            
                                                    
                        
                    
                    
  
                    
                    问题:
如下表结构和展示页面,目前项目代码在最后面,都写在控制器里面了,感觉不太好
请问用联表操作,在laravel项目中怎么组织代码比较好
表结构如下:
areas 地区表
- area_id 
地区ID - area_name 
地区名 
users 用户表
- user_id 
用户ID - user_name 
用户名 - area_id 
地区ID 
orders 订单表
- order_id 
订单ID - order_sn 
订单编号 - order_date 
下单日期 - user_id 
用户ID 
order_product 订单详情表
- order_id 
订单ID - product_id 
产品ID - quantity 
下单数量 - unit_price 
单价 
products 产品表
- product_id 
产品ID - product_name 
产品编号 - product_name 
产品名称 
查询展示如下数据:
订单列表页面:
下单日期选择控件 (选择时间范围:2017-05-01 -- 2017-06-01 显示这段日期内的订单列表,默认不限时间)
地区选择控件 (地区多选,选择北京和上海后,显示所选地区的用户的订单列表,默认不限地区)
| 订单编号 | 下单日期 | 订单产品数量 | 订单金额 | 下单用户 | 操作 | 
|---|---|---|---|---|---|
| ORDER0001 | 2017-11-06 | 12 | 1285.36 | spring | 查看详情 | 
| ORDER0002 | 2017-11-12 | 23 | 2198.65 | summer | 查看详情 | 
| ORDER0003 | 2017-11-18 | 6 | 618.15 | autumn | 查看详情 | 
| ORDER0004 | 2017-11-26 | 18 | 1838.25 | winter | 查看详情 | 
某订单详情页面:
| 产品编号 | 数量 | 单价 | 总价 | 
|---|---|---|---|
| PRODUCT001 | 3 | 15.20 | 45.60 | 
| PRODUCT002 | 2 | 10.00 | 20.00 | 
| PRODUCT003 | 10 | 6.50 | 65.00 | 
目前项目代码:
订单列表-> 控制器方法:
Order::from('orders AS O')
->leftJoin('order_product AS OP', 'OP.order_id', '=', 'O.order_id')
->leftJoin('users AS U', 'U.user_id', '=', 'O.user_id')
->when($dateStart && $dateEnd, function ($query) use ($dateStart, $dateEnd) {
    return $query
           ->where('O.order_date', '>=', $dateStart)
           ->where('O.order_date', '<=', $dateEnd);
})
->when($areaIdList, function ($query) use ($areaIdList) {
    return $query
           ->leftJoin('areas AS A', 'A.area_id', '=', 'U.area_id')
           ->whereIn('A.area_id', $areaIdList);
})
->select([
  'O.order_sn',
  'O.order_date',
  DB::raw('SUM(OP.quantity) AS sum_quantity'),
  DB::raw('(SUM(OP.quantity) * OP.unit_price) AS total_price'),
  'U.user_name',
])
->groupBy([
  'O.order_id',
  'O.order_date',
  'U.user_id',
])
->orderBy('O.order_date', 'DESC')
->orderBy('O.order_id', 'ASC')
->paginate($perpage, ['*'], 'pageNum', $pageNum);
                        
                        
                                            
          
                    
                    
          
          
                关于 LearnKu
              
                    
                    
                    
 
推荐文章: