<?php
namespace App\EventSubscriber;
// use Omines\DataTablesBundle\Event\PreCallbackEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class DatatableQuerySubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
PreCallbackEvent::class => 'onDatatableQuery',
];
}
public function onDatatableQuery(PreCallbackEvent $event): void
{
$datatable = $event->getDatatable();
if ('payment_datatable' !== $datatable->getName()) {
return;
}
$queryBuilder = $event->getQuery()->getQueryBuilder();
$request = $event->getQuery()->getRequest();
$columnIndex = 6; // assuming 'createdAt' is column 6
$dateRange = $request->get('columns')[$columnIndex]['search']['value'] ?? null;
if ($dateRange && strpos($dateRange, '|') !== false) {
[$start, $end] = explode('|', $dateRange);
if (!empty($start) && !empty($end)) {
$queryBuilder
->andWhere('payment.createdAt BETWEEN :start AND :end')
->setParameter('start', $start . ' 00:00:00')
->setParameter('end', $end . ' 23:59:59');
}
}
}
}