如内表结构和展示页面,在 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);