В моей базе данных есть 4 таблицы.
- Предложения
- Партнеры
- Клики
- Конверсии
У меня есть страница, где пользователь может создавать отчеты, которые будут выходить из этих 4 таблиц. По сути, пользователь хочет видеть, сколько кликов и конверсий есть в любом из предложений, и как филиалы генерируют эти конверсии и клики.
Теперь снова у пользователя будет возможность группировать отчет на основе города, страны, штата, операционной системы, браузера и некоторых других полей, доступных в таблицах конверсий и кликов.
Я подготовил этот запрос, чтобы получить отчет, который работает нормально для подсчета.
$offerReport = Offers::with('currency')
->withCount(['conversions as conversions' => function($q) use ($date_from, $date_to) {
$q->whereBetween('conversion_date_time', [$date_from, $date_to]);
},
'conversions as revenue'=> function($q) use ($date_from, $date_to) {
$q->whereBetween('conversion_date_time', [$date_from, $date_to])
->select(DB::raw('SUM(conversion_network_revenue)'));
},
'conversions as payout'=> function($q) use ($date_from, $date_to) {
$q->whereBetween('conversion_date_time', [$date_from, $date_to])
->select(DB::raw('SUM(conversion_affiliate_payout)'));
}
])
->whereHas('clicks',function($q) use ($date_from, $date_to) {
$q->whereBetween('created_at', [$date_from, $date_to]);
});
//withCount is taking time
$offerReport = $offerReport->withCount(['clicks' => function($q) use ($date_from, $date_to) {
$q->whereBetween('created_at', [$date_from, $date_to]);
}])
->paginate(15);
Теперь есть некоторые проблемы, когда пользователь хочет получать динамические отчеты c. С помощью этого запроса groupBy не работает с филиалами, ОС, полями браузера в таблицах «Преобразования и клики», поскольку здесь «Предложения» - это основная модель.
Как мне написать запрос, чтобы я мог создавать отчеты со всеми возможными опции?