Вы можете использовать следующее решение, где вы можете получить обычный массив, а также другой массив, ключом которого является дата, а значением - количество пользователей, зарегистрированных в этот день.
$usersPerDay = User::select(DB::raw('count(id) as `number_of_users`'),DB::raw("DATE_FORMAT(created_at, '%Y-%m-%d') new_date"))
->whereRaw('DATE(created_at) >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)')
->groupBy('new_date')->orderBy('new_date')->get();
print_r($usersPerDay->pluck('number_of_users')->toArray());
print_r($usersPerDay->pluck('number_of_users', 'new_date'));
Как ваш Требуется создать дни из диапазона дат ( ссылка ), вам необходимо сделать следующее. сначала обновите строгое значение в config / database. php file
'mysql' => [
...
'strict' => false,
...
]
, а затем выполните следующий запрос, чтобы получить желаемый результат
$query = "select
t1.new_date,
coalesce(SUM(t1.number_of_users+t2.number_of_users), 0) AS number_of_users
from
(
select DATE_FORMAT(a.Date,'%Y-%m-%d') as new_date,
'0' as number_of_users
from (
select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY as Date
from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
) a
where a.Date BETWEEN NOW() - INTERVAL 7 DAY AND NOW()
)t1
left join
(
SELECT DATE_FORMAT(created_at,'%Y-%m-%d') AS created_at,
COUNT(*) AS number_of_users
FROM users
WHERE DATE_SUB(created_at, INTERVAL 1 DAY) > DATE_SUB(DATE(NOW()), INTERVAL 1 WEEK)
GROUP BY DAY(created_at) DESC
)t2
on t2.created_at = t1.new_date
group by DAY(t1.new_date)
order by t1.new_date asc";
$users = DB::select($query);
$usersPerDay = collect($users)->pluck('number_of_users')->toArray();
print_r($usersPerDay);
die;