How can I use SQL's YEAR(), MONTH() and DAY() in Doctrine2?

后端 未结 5 1215
Happy的楠姐
Happy的楠姐 2020-11-29 07:04

I want to perform a query which would look like this in native SQL:

SELECT
    AVG(t.column) AS average_value
FROM
    table t
WHERE
    YEAR(t.timestamp) =          


        
5条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-11-29 08:03

    For Symfony 4:

    1. Install: composer require beberlei/doctrineextensions
    2. Edit: config\packages\doctrine.yaml
        doctrine:
            orm:
                dql:
                    datetime_functions:
                        DAY: DoctrineExtensions\Query\Mysql\Day
                        MONTH: DoctrineExtensions\Query\Mysql\Month
                        YEAR: DoctrineExtensions\Query\Mysql\Year
    
    1. Edit your controller:
        public function somex()
        {
            $em = $this->getDoctrine()->getManager();
    
            $emConfig = $em->getConfiguration();
            $emConfig->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Mysql\Year');
            $emConfig->addCustomDatetimeFunction('MONTH', 'DoctrineExtensions\Query\Mysql\Month');
            $emConfig->addCustomDatetimeFunction('DAY', 'DoctrineExtensions\Query\Mysql\Day');
    
            $day = '22';
            $month = '4';
    
            $qb = $em->createQueryBuilder()
                ->select('u')
                ->from('App\Entity\User', 'u')
                ->where('DAY(u.somedate) = :day')
                ->andwhere('MONTH(u.somedate) = :month')
                ->setParameter('month', $day)
                ->setParameter('day', $month)
            ;
            $trab = $qb->getQuery()->getResult();
    
    
            return $this->render('intranet/somex.html.twig', [
                'trab' => $trab
            ]);
        }
        ````
    

提交回复
热议问题