Что вы подразумеваете под уникальным? получить список различных IP-адресов в этом диапазоне? это было бы так:
public function generateStatistics(string $dateFrom, string $dateTo, int $id)
{
return Statistics::whereBetween('date', [$dateFrom, $dateTo])
->where('user_id', $id)
->select('ip')
->distinct()
->get();
}
РЕДАКТИРОВАТЬ: я увидел, что вам нужны не значения IP-адресов, а счетчик статистики.
Преобразование в MYSQL должно выглядеть примерно так (возможно, это поможет вам в вашем коде):
SELECT COUNT(id), ip
FROM statistics
WHERE user_id = {{id}} AND date BETWEEN {{dateFrom}} AND {{dateTo}}
GROUP BY ip;
Таким образом, будет возвращено количество запросов, сгруппированных по IP. Сумма всех подсчетов даст вам общую сумму запроса, а количество IP-адресов даст вам общую сумму уникального запроса.
На Laravel:
$requestPerIp = Statistics::whereBetween('date', [$dateFrom, $dateTo])
->where('user_id', $id)
->select('ip', DB::raw('count(*) as total'))
->groupBy('ip')
->get();
Для общего уникального запроса просто:
$numberOfUniqueRequest = count($requestPerIp);