php - 使用 Laravel Eloquent 地按月或周分组

标签 php database laravel eloquent

我有一个管理我的投资的项目,也就是说,它获取我的每日报表并将其保存在我的项目中,以便我可以看到它产生了多少,总而言之,我有一个表,每天都有这些值,我已经可以生成按天分隔的信息并且它完美地工作(事实上它比我所做的要复杂一点但基础是这样);

但是现在我很难看到什么时候我得到一个非常大的日期范围,例如 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();  

简单解释一下每条eloquent信息是什么:

AtivosExtrato:每日收入信息所在的模型;

1) join:标题名称的外部表

2) join:经纪人名字的外表

3) join: 保存导入日期的表,与 Assets 表中的id相关Extrato,具有减少搜索时权重和提高性能的功能.

哪里:限制为相关用户

WhereBetween:限制到日期范围

1)groupBy:按标题分组

2)groupBy:按导入日期分组

表结构:

ativos_extrato ativos_extratos ativos_extratos 外键 ativos_extratos Index

数据导入 data_imports

解决方案:

$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();

最佳答案

添加 DB::raw(WEEK(data_imports.data_import) AS weeknumber) 然后将 ->groupBy('data_imports.data_import') 替换为 ->groupBy('weeknumber')MONTH() 函数相同,如果你想按月分组:添加另一个选择列 DB::raw(MONTH(data_imports. data_import) AS monthnumber) 并将 ->groupBy('data_imports.data_import') 替换为 ->groupBy('monthnumber')。所以整个 Eloquent 查询与周分组将是:

$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) 
->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(); 

关于php - 使用 Laravel Eloquent 地按月或周分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53687549/

相关文章:

php - PHP : {'error' : "Missing ' inputs' or 'instances' key"} 中的休息 API

php - 我如何才能只选择drupal watchdog数据库表中变量的类型?

sql - DISTINCT ON 输出错误

java - MySQL、CSV、.txt 检索所有数据的性能

database - 拥有仅包含主键字段的表是概念错误吗?

php - 如何在 Laravel 5.8 中扩展或制作自定义 PasswordBroker sendResetLink() 方法?

java - 是否可以检测访问者 DNS 服务器?

php - 扩展 Laravel 5 响应外观

php - Laravel 通过 SQL 文件播种

php - 如何在laravel中将主键与随机数连接?