Код: Выделить всё
$period = new DatePeriod(
new DateTime('2024-03-20 00:00:00'),
new DateInterval('P1D'),
new DateTime('2024-03-28 23:59:59')
);
$suppliersInfo = OrderProduct::whereNotNull('brand')
->whereBetween('updated_at', [$startDate, $endDate ])->get();
$labels = [];
foreach ($period as $date){
$labels[] = $date->format('d-m-Y');
$dateToSearch = $date->format('Y-m-d');
$orderCount = $suppliersInfo->where( 'updated_at' , $dateToSearch )
->where('brand','nestle')
->count();
$data[] = $orderCount;
}
Я использую массивы $labels[] и $data[] для создания диаграммы JavaScript. По оси X указаны даты, по оси Y — количество заказов, а в разделе заголовка — название бренда. Поскольку диаграмма js последовательно использует все данные в $labels и $data для каждого, мне нужно последовательно заполнять их подходящими данными. Вот почему мне нужно просматривать базу данных для каждого заказа, если он произошел в дату, которую я запрашиваю (эти даты есть в $ period).
У меня есть два варианта:
1 -Запросите таблицу в цикле и найдите дату, которую я искал.
2-Возьмите все записи из таблицы и найдите дату, которую я искал, внутри записей.
Я выбираю второе решение, потому что оно не перегружает базу данных при каждом поиске даты. Но в этом решении я не могу соединить чистую информацию о дате с информацией о дате и времени, потому что у нее есть время. Мое решение ниже
Код: Выделить всё
$period = new DatePeriod(
new DateTime('2024-03-20 00:00:00'),
new DateInterval('P1D'),
new DateTime('2024-03-28 23:59:59')
);
$suppliersInfo = OrderProduct::whereNotNull('brand')
->whereBetween('updated_at', [$startDate, $endDate ])->get();
$labels = [];
foreach ($period as $date){
$labels[] = $date->format('d-m-Y');
//$dateToSearch = $date->format('Y-m-d');
$startDate = $date->format('Y-m-d 00:00:00');
$endDate = $date->format('Y-m-d 23:59:59');
$orderCount = $suppliersInfo->whereBetween( 'updated_at' , [ $startDate, $endDate] )
->where('brand','nestle')
->count();
$data[] = $orderCount;
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... o-datetime
Мобильная версия