@apr1cot

Как в Laravel связать 3 таблицы и объединить строки по дате?

Добрый день. Уже третьи сутки бьюсь над казалось бы простой задачей.

У меня имеются 3 таблицы. сampaign, keitaros и googles. Через отношения "многие ко многим" я получаю все связанные по campaign_id строки. С этим проблем нет.

Скриншот выборки
64db69dc1a456038236449.png


У таблиц "keitaros" и 'googles" есть по 4 записи. Две записи за 15.08.2023 число, и еще две записи за 16.08.2023

Проблема заключается в том, что я никак не могу объединить эти записи по датам.

У меня получилось сделать так, и это работает, но мне нужно, чтобы выборка была в рамках одной коллекции.
$campaigns = Campaign::with('keitaros', 'googles')->find(1);

$campaigns->googles->map(function ($item) {
    dump($item->select('created_at', DB::raw('SUM(cost) as total_cost'))->groupBy('created_at')->get());
});

$campaigns->keitaros->map(function ($item) {
    dump($item->select('created_at', DB::raw('SUM(income) as total_income'))->groupBy('created_at')->get());
});
  • Вопрос задан
  • 294 просмотра
Решения вопроса 1
@apr1cot Автор вопроса
Спасибо Дмитрий за подсказку. В итоге сделал вот так:

Вместо трёх таблиц создал одну, и сделал выборку с помощью groupBy
$postbacks = DB::table('postbacks as p')
            ->select(
                DB::raw('DATE(p.created_at) as date'),
                'u.name as user_name',
                'c.name as campaign_name',
                'c.domain',
                'pr.name as provider_name',
                'pr.commission',
                DB::raw('SUM(p.income) AS t_income'),
                DB::raw('SUM(p.cost) AS t_cost')
            )
            ->join('campaigns as c', 'p.campaign_id', '=', 'c.id')
            ->join('providers as pr', 'c.provider_id', '=', 'pr.id')
            ->join('users as u', 'c.user_id', '=', 'u.id')
            ->whereBetween('p.created_at', ['2023-08-15', '2023-08-17'])
            ->where('c.user_id', 1)
            ->groupBy(DB::raw('DATE(p.created_at)'), 'c.id')
            ->orderBy('date', 'ASC')
            ->get();
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@testergood
join неуместен?
https://laravel.com/docs/10.x/queries#joins

или я неправильно задачу понял...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы