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

后端 未结 5 1205
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条回答
  • 2020-11-29 07:44

    orocrm/doctrine-extensions seems to be a good project too

    It supports both MySQL and PostgreSql .. the goal is to be cross DB

    0 讨论(0)
  • 2020-11-29 07:45

    In Symfony 4 you must install DoctrineExtensions:

    composer require beberlei/DoctrineExtensions
    

    And then edit the doctrine config file (config/packages/doctrine.yaml) as follow:

    doctrine:
        orm:
            dql:
                string_functions:
                    MONTH: DoctrineExtensions\Query\Mysql\Month
                    YEAR: DoctrineExtensions\Query\Mysql\Year
    
    0 讨论(0)
  • 2020-11-29 07:50

    go to this page and choose your database systeme and pick up functions thats you want

    ... I too had the same problem as you... then I modified my doctrine.yaml file using exactly the same names as in the github file and it worked.

    0 讨论(0)
  • 2020-11-29 07:55

    You can add Doctrine extension so you can use the MySql YEAR and MONTH statement by adding this configuration if you're on Symfony:

    doctrine:
        orm:
            dql:
                string_functions:
                    MONTH: DoctrineExtensions\Query\Mysql\Month
                    YEAR: DoctrineExtensions\Query\Mysql\Year
    

    now you can use the MONTH and YEAR statements in your DQL or querybuilder.

    Note: The extension supports MySQL, Oracle, PostgreSQL and SQLite.

    0 讨论(0)
  • 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
            ]);
        }
        ````
    
    0 讨论(0)
提交回复
热议问题