Если вы хотите продолжать использовать ту же логику, что и у вас, то будет достаточно простого groupBy .
Вы можете создать для него другую функцию, например:
public function generateUniqueStatistics(string $dateFrom, string $dateTo, int $id)
{
return Statistics::whereBetween('date', [$dateFrom, $dateTo])->where('user_id', $id)->groupBy('ip')->get();
}
Таким образом, вы можете просто изменить вызов на:
$statisticsTotal = $this->frontendRepository->generateUniqueStatistics($dateFrom, $dateTo, $request->user()->id);
, и код отдыха будет работать с ним как в том же формате.
Обновление
Я подумал, что это очевидно, но для ясности, чтобы groupBy работал без столбцов select , вам нужно будет запустить mySql в нестрогом режиме. .
В вашем файле config/database.php
вы найдете массив connections
, в котором есть ключ mysql
, установите его свойство strict
как false
.
Если вы не хотите этого делать и продолжаете использовать строгий mysql, просто дайте имя столбцам, которые вы хотите выбрать, и не включайте id, так как id здесь не важен при выборе группировки статистики по ip.
Так, например, скажем, вам нужно company_id
и agent
, вы можете сделать так:
return Statistics::whereBetween('date', [$dateFrom, $dateTo])->where('user_id', $id)->select('company_id','agent','ip')->groupBy('ip')->get();
Надеюсь, это поможет