【发布时间】:2019-05-10 06:48:28
【问题描述】:
我有一个项目可以管理我的投资,也就是说,它需要我的每日报表并将其保存在我的项目中,以便我可以看到它的收益,总而言之,我有一张表格,其中包含每天的这些值,我已经可以生成按天分隔的信息,并且效果很好(实际上它比我所做的要复杂一些,但基础是这样);
但是现在看到我得到一个非常大的日期范围(例如 1 年)变得越来越糟糕,它每天都会列出,我想要一种按月或按周分组的方法,
提前感谢您的帮助。
$rows = AtivosExtrato::select('titulo_id', DB::raw('SUM(valor_bruto_atual) AS valor'), 'data_imports.data_import as created_at')
->join('titulos','titulo_id', '=', 'titulos.id' )
->join('representantes','representante_id', '=', 'representantes.id' )
->join('data_imports','data_import_id', '=', 'data_imports.id' )
->where('user_id', Auth::user()->id)
->whereBetween('data_imports.data_import', [$request->input('start_date'), $request->input('end_date')])
->groupBy('titulos.nome_titulo')
->groupBy('data_imports.data_import')
->orderBy('data_import')
->orderBy('titulos.nome_titulo')
->get();
简述每条雄辩的信息是什么:
AtivosExtrato:模型所在的每日收入信息;
1) 连接: 标题名称的外部表
2) 加入: 代理名称的外部表
3) join: 保存导入日期并与asset tableExtrato中的id相关的表,它具有减少搜索时的权重并获得性能的功能.
其中:仅限于相关用户
WhereBetween:限制日期范围
1) groupBy:按标题分组
2) groupBy:按导入日期分组
表结构:
ativos_extrato ativos_extratos 外键
解决方案:
$rows = AtivosExtrato::select(
'titulo_id',
DB::raw('SUM(valor_bruto_atual) AS valor'),
'data_imports.data_import as created_at',
DB::raw('WEEK(data_imports.data_import) AS weeknumber')
)
->join('titulos','titulo_id', '=', 'titulos.id' )
->join('representantes','representante_id', '=', 'representantes.id' )
->join('data_imports','data_import_id', '=', 'data_imports.id' )
->where('user_id', Auth::user()->id)
->whereIn('ativos_extratos.data_import_id',
DataImport::Select(DB::raw('max(ID)'))
->whereBetween('data_import', [$request->input('start_date'), $request->input('end_date')])
->groupBy(db::raw('Week(data_import)')) )
->whereBetween('data_imports.data_import', [$request->input('start_date'), $request->input('end_date')])
->groupBy('titulos.nome_titulo')
->groupBy('weeknumber')
->orderBy('data_import')
->orderBy('titulos.nome_titulo')
->get();
【问题讨论】:
-
能否请您发布您的数据结构和表之间的关系?
-
@user3325126 我更新了帖子以添加结构
标签: php database laravel eloquent