Какой метод использовать для коллекции Laravel, чтобы найти дату между двумя DateTimePhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Какой метод использовать для коллекции Laravel, чтобы найти дату между двумя DateTime

Сообщение Anonymous »

Код: Выделить всё

$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;
}
Как видно из приведенного выше кода, у меня есть информация о дате, содержащая только дату, но мне нужно найти ее в поле базы данных (postgresql) update_at DateTime. Поскольку в этом поле также содержится информация о времени, я не могу найти дату. Я могу установить две даты из $dateToSearch с информацией о времени 00:00:00 и 23:59:59 и использоватьwhereBetween, но я не уверен, что это подходящее решение. Есть ли что-нибудь проще, например, мы используемwhereDate в Eloquent?
Я использую массивы $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;
}
Кстати, я не могу использовать DatePeriod::INCLUDE_END_DATE из-за моей версии PHP. (8.1.2)

Подробнее здесь: https://stackoverflow.com/questions/786 ... o-datetime
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»