У меня есть проект, который управляет моими инвестициями, то есть он берет мое ежедневное утверждение и сохраняет его в моем проекте, чтобы я мог видеть, сколько это приносит, в итоге у меня есть таблица, в которой эти значения ежедневноЯ уже могу генерировать информацию, разделенную по дням, и она работает отлично (на самом деле это немного сложнее, чем то, что я делаю, но основа такова);
Но теперь становится плохо видеть, когда яполучить очень большой диапазон дат, например, 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) объединение: таблица, в которой сохраняется дата импорта иотносится к идентификатору в активе тВ состоянии Extrato, он имеет функцию, позволяющую уменьшить вес во время поисков и повысить производительность.
, где: ограничение для рассматриваемого пользователя
WhereBetween: ограничение по диапазону дат
1) groupBy: Группировка по заголовкам
2) groupBy: группировка по дате импорта
Структура таблицы:
ativos_extrato ativos_extratos внешний ключ
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();